25 tabs
はUITabBarController
にあり、各タブは異なるデータでtableview
と表示されます。同じtableview
をすべてのタブで異なるデータで使用できますか?残りの4つのタブが残りの部分に表示されます。私は同じUserInterfaceを別のデータで使用したいと思っています
P.S. :私は迅速にコーディングしています。
25 tabs
はUITabBarController
にあり、各タブは異なるデータでtableview
と表示されます。同じtableview
をすべてのタブで異なるデータで使用できますか?残りの4つのタブが残りの部分に表示されます。私は同じUserInterfaceを別のデータで使用したいと思っています
P.S. :私は迅速にコーディングしています。
はい、もちろん可能です。あなたのView Controllerの新しいインスタンスをインスタンス化し、それをデータソースに接続して委譲して提示するだけです。
25タブバーコントローラのタブは非常識です。あなたはあなたのユーザーインターフェイスを再考する必要があります。
はいできます。
スイッチを使用して、選択したタブバーアイテムインデックスを検出することができます。そこでは、必要に応じてデータソースを割り当てることができます。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//suppose index is your tab Bar item index
switch index {
case 0:
return YOUR_DATA_ARRAY1.count
case 1:
return YOUR_DATA_ARRAY2.count
.
.
.
case 25:
return YOUR_DATA_ARRAY25.count
default:
break
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("YourCellIdentifier", forIndexPath: indexPath)
//You can use same switch here to access objects from your data array and use it to assign values for cell
return cell;
}
SIDE注:あなたのデータは非常に大きいと実際にあなたのアプローチは、間違っています。このアプローチを使用することはできますが、その考え方を再考することを強くお勧めします。
はいできます。私の提案は、基本ViewControllerをtableViewで作成し、各ViewControllerをタブに接続して拡張することです。次に、接続されているすべてのビューコントローラは、必要に応じてデータ配列を変更するだけです。
だから、基本ViewControllerの名前はBaseViewController.swift
です。そのコントローラでは、
var dataSource = [String]()
like-のdataSourceという名前の配列その後
class BaseViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
like-今、その後、あなたのテーブルビューを追加し、プロトコルリストに必要な代表者とデータソースを追加しています。
var myTableView: UITableView!
ここで、viewDidLoadメソッドでテーブルを追加します。
override func viewDidLoad() {
super.viewDidLoad()
self.myTableView = UITableView.init(frame: self.view.bounds)
self.myTableView.delegate! = self
self.myTableView.dataSource! = self
self.view.addSubview(self.myTableView)
}
データソースメソッドを実装するだけです。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.dataSource.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("myTableViewCell", forIndexPath: indexPath)
cell.textLabel.text = self.dataSource[indexPath.row] //assuming you only have a string in your array
return cell;
}
これで、このクラスを拡張するだけで済みます。たとえば、最初のTabがViewControllerA.swiftに対応しているとします。
ので、ちょうどthis-
class ViewControllerA: BaseViewController
のように拡張した後、viewDidLoad
方法では、dataSource
配列としてあなたのデータ配列を割り当てます。
だから、1番目のコントローラーに配列名dataAが表示されたとしましょう。
だから、あなたは自分のデータソースが画像、タイトルまたは複数のラベルを持つクラスのオブジェクトのような複雑なデータを表示する必要がある場合は、あなただけのcellForRowAtIndexPath
内をオーバーライドすることができ、あなたのviewDidLoad
方法、
self.dataSource = dataA
でこれを行いますその特定のクラス。そうすれば、他のコントローラにも影響を与えます。
これが役に立ちます。