2016-08-04 4 views

答えて

2

はい、もちろん可能です。あなたのView Controllerの新しいインスタンスをインスタンス化し、それをデータソースに接続して委譲して提示するだけです。

25タブバーコントローラのタブは非常識です。あなたはあなたのユーザーインターフェイスを再考する必要があります。

0

はいできます。

スイッチを使用して、選択したタブバーアイテムインデックスを検出することができます。そこでは、必要に応じてデータソースを割り当てることができます。

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注:あなたのデータは非常に大きいと実際にあなたのアプローチは、間違っています。このアプローチを使用することはできますが、その考え方を再考することを強くお勧めします。

0

はいできます。私の提案は、基本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 

でこれを行いますその特定のクラス。そうすれば、他のコントローラにも影響を与えます。

これが役に立ちます。

関連する問題