【问题标题】:IOS prepareForSegue using custom tableview cellIOS prepareForSegue 使用自定义表格视图单元
【发布时间】:2014-07-28 03:49:54
【问题描述】:

我用我的自定义单元格创建了一个 .xib,我在我的故事板中的一个 tableviewcontroller 上使用它。

在情节提要中,我将当前 tableview 与另一个使用 push segue 的 tableview 链接起来。 (当用户单击其中一个单元格时,他有一个新视图)。

问题是,我不明白,如何将这个 segue 与我的 CUSTOM 单元“链接”?

我正在加载我的自定义单元格:

static NSString *simpleTableIdentifier = @"cellCustom";

cellCustomView *cell = (cellCustomView *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"cellCustom" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

当我尝试实现该方法时:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSLog(@"test"); 
}

我什么都没有,因为对我来说,我错过了一些与我的自定义单元格有关的东西,以及我的故事板的 segue,但我不明白它是如何工作的:/

谢谢,

【问题讨论】:

    标签: ios uitableview


    【解决方案1】:

    你试过了吗?

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [self performSegueWithIdentifier:@"MySegue"
                                  sender:self];
    }
    

    此方法属于包含 tableView 的任何类。确保 tableView 的委托等于该类中的 self。如果您正在使用情节提要,请按住 Control 将此视图拖动到要转接的任何视图。单击该 segue,并将其标识符更改为“MySegue”或任何您想要的,只要它在您的代码中相同。

    【讨论】:

    • 在我的故事板中,将 tableview 与我的其他视图链接起来,我在 segue 上设置了一个标识符是的。但是,当我使用来自 xib 的自定义单元格时,我认为我需要做其他事情。
    • 好的,您的回答是一个不错的解决方案,但我不明白。为什么方法 prepareForSegue 不起作用?
    • @deveLost prepareForSegue 不初始化 segue。每当执行 segue 时(即在您使用 self performSegueWithIdentifier:sender: 之后)都会调用它。prepareForSegue 的重点是做一些事情,例如将对象传递给 segue 中的目标视图控制器。
    • mhh,但就我而言,我想将一个对象传递给目标 VC。
    • @deveLost 如果它对您有用,请不要忘记接受答案。
    【解决方案2】:

    你可以试试下面的方法

    Control + 从您的单元格拖动到下一个视图控制器以设置一个名为“showDetail”的 segue,您希望在单击 tableview 单元格时显示它。

    在你的视图控制器中

    如果你有 nsarray 之类的

    NSArray *names = @[@"Apple", @"Google", @"Microsoft"];
    

    而你想根据选定的表格行单元格索引来传递数组值,你可以如下

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
       if ([[segue identifier] isEqualToString:@"showDetail"]) 
       {
            NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
            NSString *name = _names[indexPath.row]; 
    
            // For explanation sake, I am assuming name as property defined 
            // in your destination view controller
            [[segue destinationViewController] setName:name];  
        }
    }
    

    【讨论】:

    • 嗨,谢谢你的帮助,你下面的答案帮助了我^^但是谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多