再利用可能なビューコントローラUsersViewControllerBase
を作成したいと思います。SwiftでカスタムUIViewControllerをサブクラス化する方法は?
UsersViewControllerBase
はUIViewController
を拡張し、2つのデリゲート(UITableViewDelegate
、UITableViewDataSource
)を実装し、2つのビュー(UITableView
、UISegmentedControl
)を有する
目標はUsersViewControllerBase
の実装を継承とにセグメント化された制御のセグメント化されたアイテムをカスタマイズすることですUsersViewController
クラス。
class UsersViewControllerBase: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var tableView: UITableView!
//implementation of delegates
}
class UsersViewController: UsersViewControllerBase {
}
UsersViewControllerBase
は、識別子が指定され、ストーリーボードに存在し、すべてのコンセントが接続されています。
は疑問がUsersViewControllerBase
すべてが
let usersViewControllerBase = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewControllerBase") as? UsersViewControllerBase
を作品の私は、インスタンスを作成するときに、私はすべてのビューを継承するUsersViewControllerとUsersViewControllerBase
の機能を初期化する方法である。しかし、私はUsersViewController
のインスタンスを作成するときにnil
アウトレット (私は単純なUIViewController
を作成し、それにストーリーボードのUsersViewControllerクラスを割り当てました)
let usersViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewController") as? UsersViewController
ビューは継承されていないようです。
私はストーリーボードからの景色や店舗を持つコントローラを取得しUsersViewControllerBase
でinitメソッド期待:
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
}
}
をそして私はUsersViewController
を初期化します:
let usersViewController = UsersViewController()
しかし、残念なことに
さて、彼らは継承されているので、何かが間違っています(ストーリーボードシーンの設定など)。あなたはそれらのアウトレットを_connect_することを覚えましたか? – matt
いいえ私は、UsersViewControllerBaseで既に接続されている(おそらく継承されている)と考えて、私はアウトレットをUsersViewControllerに接続しませんでした。そしてそのアイデアは、UsersViewControllerの同じビューを再作成するのではなく、UsersViewControllerBaseから継承します。 – Alex