Tôi muốn tạo bộ điều khiển xem có thể tái sử dụng UsersViewControllerBase
.Làm thế nào để phân lớp UIViewController tùy chỉnh trong Swift?
UsersViewControllerBase
kéo dài UIViewController
, và thực hiện hai đại biểu (UITableViewDelegate
, UITableViewDataSource
), và có hai quan điểm (UITableView
, UISegmentedControl
)
Mục đích là để kế thừa thi hành UsersViewControllerBase
và tùy chỉnh các mục phân đoạn kiểm soát phân đoạn trong UsersViewController
lớp học.
class UsersViewControllerBase: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var tableView: UITableView!
//implementation of delegates
}
class UsersViewController: UsersViewControllerBase {
}
Các UsersViewControllerBase
hiện diện trong kịch bản và tất cả các cửa hàng được kết nối, nhận dạng được chỉ định.
Câu hỏi đặt ra là làm thế nào tôi có thể init UsersViewController để kế thừa toàn bộ các quan điểm và chức năng của UsersViewControllerBase
Khi tôi tạo ra các thể hiện của UsersViewControllerBase
mọi thứ hoạt động
let usersViewControllerBase = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewControllerBase") as? UsersViewControllerBase
Nhưng khi tôi tạo ra các thể hiện của UsersViewController
Tôi nhận được nil
cửa hàng (Tôi đã tạo đơn giản UIViewController
và gán lớp UsersViewController cho nó trong bảng phân cảnh)
let usersViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewController") as? UsersViewController
Dường như lượt xem không được kế thừa.
Tôi mong chờ phương pháp init trong UsersViewControllerBase
mà được điều khiển với quan điểm và các cửa hàng từ kịch bản:
class UsersViewControllerBase: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var tableView: UITableView!
init(){
let usersViewControllerBase = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewControllerBase") as? UsersViewControllerBase
self = usersViewControllerBase //but that doesn't compile
}
}
Và tôi sẽ init UsersViewController
:
let usersViewController = UsersViewController()
Nhưng tiếc là điều đó không làm việc
Vâng, chúng _are_ được kế thừa, vì vậy có điều gì đó không ổn (như có thể thiết lập cảnh trong kịch bản của bạn). Bạn có nhớ _connect_ những cửa hàng đó không? – matt
không có tôi đã không kết nối các cửa hàng trong UsersViewController bởi vì tôi nghĩ rằng họ đã được kết nối (vì vậy có thể được thừa hưởng) trong UsersViewControllerBase. Và ý tưởng không phải là để tái tạo cùng một cái nhìn trong UsersViewController nhưng kế thừa nó từ UsersViewControllerBase – Alex