表视图控制器如何与其详细视图进行通信?

时间:2012-01-20 14:58:25

标签: objective-c ios cocoa-touch uitableview

我有一个表格视图,如果点击某一行,则会显示详细信息视图。但细节视图如何知道哪一行被挖掘? 例如,我有一个显示名称的MainController。如果我点击“Johnny”,下一个屏幕应显示带有“Johnny”字符串的标签。我该怎么办?

[编辑 - 补充代码]

- (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

- >合成属性

3 个答案:

答案 0 :(得分:2)

您可以将对象(即String Jonny)作为属性传递给详细视图控制器。

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

//Don't forget to synthesize name 
tableview控制器中的

-(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];
}

答案 1 :(得分:0)

表视图委托具有方法tableView:didSelectRowAtIndexPath:,在此方法中,您将显示详细视图,以便知道从indexPath参数中选择了哪一行,并且可以在创建新视图控制器时传递所需的任何信息< / p>

答案 2 :(得分: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;
}

然后在viewDidLoad

中设置名称标签

tableView:didSelectRowAtIndexPath:方法中,获取索引路径引用的名称,使用initWithName:创建并初始化详细视图控制器,然后按导航堆栈。