2012-01-20 7 views
0

私はテーブルビューを持っており、特定の行がタップされていると、詳細ビ​​ューが表示されます。しかし、詳細ビューはどの行がタップされたかをどのように知っていますか? 例えば、私は名前を表示するMainControllerを持っています。 「Johnny」をタップすると、次の画面に文字列「Johnny」のラベルが表示されます。どうすればいい?テーブルビューコントローラは詳細ビューとどのように通信しますか?

[EDIT - コードを追加]

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ArticleView *article = [self.storyboard instantiateViewControllerWithIdentifier:@"ArticleView"]; 
    [article.myLabel setText:@"random"]; 
    [self.navigationController pushViewController:article animated:YES]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    NSDictionary *info = [json objectAtIndex:indexPath.row]; 
    cell.textLabel.text = [info objectForKey:@"username"]; 
    cell.textLabel.backgroundColor = nil; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
    cell.detailTextLabel.backgroundColor = nil; 
    cell.detailTextLabel.textColor = [UIColor whiteColor]; 
    cell.detailTextLabel.text = [info objectForKey:@"user_pic"]; 

    // Configure the cell... 

    return cell; 
} 

ArticleView.h

@interface ArticleView : UIViewController 
@property (weak, nonatomic) IBOutlet UILabel *myLabel;  
@end 

ArticleView.m

- >の合成プロパティ

あなたは可能性が
+0

iOS向け、ココアタッチですか?またはMac、ココア? – vikingosegundo

+0

これはiOS用です... –

+0

ですので、次の時間タグを正しく入力してください。 Xcodeは(上級の)テキストエディタなので、この質問にとって重要ではありません。 – vikingosegundo

答えて

2

Pオブジェクト(すなわち、 String Jonny)をプロパティとして詳細ビューコントローラに追加します。あなたはindexPathパラメータから選択され、いずれかを渡すことができますどの行を知っているので、テーブルビューコントローラテーブルビューのデリゲートメソッドtableView:didSelectRowAtIndexPath:を持って

-(void)tableView:(UITableView *)tableview didSelectRowAtIndexPath:(NSIndexPath)indexPath 
{ 
    NSDictionary *info = [json objectAtIndex:indexPath.row]; 
    ArticleViewController *articleViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ArticleViewController"]; 
    articleViewController.articleView = articleView; 
    [self.navigationController pushViewController: articleViewController animated:YES]; 
} 
+0

おそらくあなたは 'dvc.name = [self.names objectAtIndex:indexPath.row]; ' – Kevin

+0

:)と入力することを意味していました。 – vikingosegundo

+0

私は 'DetailViewController'にUILabel' myLabel'を持っています。これは私がそれをした(それは動作しません): 'ArticleView * article = [self.storyboard instantiateViewControllerWithIdentifier:@" ArticleView "]; [article.myLabel setText:@ "Johnny"]; ' –

0

@interface ArticleViewController : UIViewController 
@property (retain) ArticleView *articleView; 
@end 

//Don't forget to synthesize name 

は、この方法では、あなたの詳細ビューを提示します新しいビューコントローラを作成するときに必要な情報

0

ここでiPhoneを使用していると仮定すると、詳細ビ​​ューにプロパティ名が表示されます。

@propery (nonatomic, retain) NSString * name; 

とinitメソッドを次のようにその後

- (id) initWithName: (NSString *) name 
{ 
    self = [super initWithNibName: @"<view-controller-nib-name>" bundle: nil]; 
    if (self) { 
     self.name = name; 
    } 
    return self; 
} 

tableView:didSelectRowAtIndexPath:方法でviewDidLoad

に名前ラベルを設定し、インデックスパスによって参照される名前を取得し、詳細ビューを作成するとinitコントローラにinitWithName:を使用して、navスタックを押します。

+0

- ここでは、NSStringプロパティを保持する代わりにコピーする必要があります。 http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain – vikingosegundo

関連する問題