2011-12-11 9 views
2

内の2つのテーブルを制御するためにどのように私は同じNIBで2 UITableViewsを必要としています。私はIBを使用し、2つのテーブルを持つビューを作成しました。iPhoneは:1 NIB

マイヘッダファイルのViewControllerと二つのクラス、テーブルのそれぞれに1つずつ(下記参照)を含みます。 IBでは、各テーブルのデリゲートとデータソースをFileOwnerに接続することができますが、IBOutlet接続を作成する方法を考えることはできません。 - [News tableView:numberOfRowsInSection:]:インスタンスに送信された認識できないセレクタ0x15d3c0 2011-12-11 07:20:27.480 myCity1 [659:707]キャッチされていない例外「NSInvalidArgumentException」のためにアプリケーションを終了しています。 、理由: ' - [ニュースのtableView:numberOfRowsInSection:]:認識されていないセレクタはインスタンス0x15d3c0に送られた'

はここでヘッダファイルです:

@interface News : UIViewController { 

} 

@end 

@interface TownNews : UITableViewController { 

UITableView *townNewsTable; 

} 

@property (nonatomic, retain) IBOutlet UITableView *townNewsTable; 

@end 

@interface GeneralNews : UITableViewController { 

UITableView *generalNewsTable; 

} 

@property (nonatomic, retain) IBOutlet UITableView *generalNewsTable; 

@end 

答えて

6

私は私のプロジェクトの一つにこの事を扱いました(あなたはそれを見ることができます:appstoreで名前IJCAI11のフリーアプリ、タブの 'People'(インデックス作成は別のtableView));上記のコードを見る限り、複雑すぎるものになっています。私の代わりにあなたがやるべきではない何言っての、私はそれをやった方法を説明します:)

私は一つのクラス、のYaddaYaddaViewControllerを言わせていました。

@interface YaddaYaddaViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 
{ 
    UITableView *tableView1; 
    UITableView *tableView2; 
} 
@property (nonatomic, retain) IBOutlet UITableView * tableView1; 
@property (nonatomic, retain) IBOutlet UITableView * tableView2; 

@end 

のViewControllerをのUIViewControllerから導出されることに注意してください、ではないのUITableViewController(クラスのUITableViewControllerの目標は、あなたがいつものUIViewControllerを使用すべき複数のカスタムもののため、2分で簡単なのtableViewを実装できるようにすることです。詳細を読むにはUITableViewControllerクラスのドキュメントを一見してみてください)。 「ファイルの所有者」I単に設定YaddaYaddaViewControllerためのIBで

。 tableView1とtableView2のアウトレットをViewの適切なテーブルにリンクします。 デリゲートとデータソースを両方ともtableView1/2にリンクするので、私は '複数の'デリゲートとデータソースを持っています。

そして最後に、コードの中で、すべてのデリゲートメソッド(例のtableViewのために:

:cellForRowAtIndexPath :) 私はただのtableView値に注意を払う、のデリゲートイベントは次のように、このメソッドの呼び出しを引き起こしました
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == self.tableView1) { 
     // some code here 
    } else { 
     // alternative code here 
    } 
} 

は、この情報がお役に立てば幸い!彼は言ったものは何でも

+0

おかげMakaronをチェックDidSelectRowAtIndexPath

NumberOfRowsInSection、NumberOfSection、CellForRowAtIndexPath、同様にすべてのテーブルビューの代表者にタグの助けを借りて比較。それははるかに簡単に見えます。感謝 – Jeremy

-1

@makaronは絶対に正しく、あなたがのUITableViewの宣言があるとライブラリ(ないプログラムでとテーブルビューを作成する場合)、その後に自分のヘッダファイルを変更

1)を除き、次のとおりです。 -

@interface MyTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 
{ 
    IBOutlet UITableView *tableView1; 
    IBOutlet UITableView *tableView2; 
} 

@end 
条件を確認DidSelectRowAtIndexPath

NumberOfRowsInSection、NumberOfSection、CellForRowAtIndexPathなど

と内のすべてのテーブルビュー代議員

if (tableView == self.tableView1) { 
     // code for tableView1 
    } else { 
     // code for tableView2 
    } 

また、あなたはヘッダファイルに2 tableViewsを宣言したくない場合。2つのテーブルビューのライブラリーからは見るまで低下し、それらのそれぞれにタグを設定した条件

//I am assuming that tableView1 has tag set to be 1 

    if (tableView.tag==1) { 
      // code for tableView1 
     } else { 
      // code for tableView2 
     } 
+0

正直言って、答えの最初の部分が私とどのように違うのか分かりません。第2のものについて...はい、またアプローチですが、タグの代わりにオブジェクトの範囲(あなたが好きな場合はOOPのアプローチ)にとどまることができます。ちょうど、私は、スマートがジェレミーのコードに間違っているとは言いませんでした。私は彼が物事をオーバーコンプリートすることに疑いを持っていたことを除いて:) – makaron

+0

まず、Interface builderを使って作るとき(言い換えればプログラムでtableViewを作っていない場合) IBOutletをヘッダファイルに渡します。 IBOutletはInterface Builder Outletを意味します。そして2つ目は、UITableViewのプロパティを非アトムで保持していないビューのみを扱う必要がある場合です。 –

+0

emmm ...最初のHelloWorldリンゴのマニュアルから得た情報のおかげで))男、私はIBOutletを設定しました。これはAppleの文書に従って設定されています。やあ、私は非原子を設定して保持:同じ文字列でも、リンゴの文書によると。 – makaron

関連する問題