2014-10-01 88 views
0

我有一个TableView,我有行的标题保存属性的名称。didSelectRowAtIndex没有正确更新

属性是在另一个TableView中定义的,我可以按“Add”将新创建的对象添加到第一个TableView中。

如果我现在想编辑让我们说列表中的第二个对象,我必须按下它(切换到第二个TableView)按取消,然后再按一次,以获得正确的名称。

didSelectRowAtIndex似乎并不正确,但我无法弄清楚它是什么。

这里是我的方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    self.indexPathInt = (int)indexPath.row; 
} 

和:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:kSegueIdentifier]){ 

     AddEntry *controller = [[[segue destinationViewController] viewControllers] objectAtIndex:0]; 

     controller.delegate = self; 
    } 

    if ([[segue identifier] isEqualToString:kEditSegueIdentifier]) { 

     edited = YES; 

     AddEntry *controller = [[[segue destinationViewController] viewControllers] objectAtIndex:0]; 

     EntryObject *entry = self.entryObjectArray[self.indexPathInt]; 

     controller.name = entry.name; 
     controller.someProperty = entry.soneProperty; 


     controller.delegate = self; 
    } 
} 

如果我在PrepareforSegue方法是不一样的DidSelectRowAtIndex方法indexPath.row日志indexPathInt,而是一个我点击之前。

因此indexPathInt没有得到及时更新。

是否有另一种方法来访问任何方法中的选定行而不将它发送给变量?

+0

'UITableView'方法'indexPathForSelectedRow'将为您提供当前选定行的'NSIndexPath'。 – bobnoble 2014-10-01 10:32:18

回答

0

在设置self.indexPathInt之前,您可能正在调用[self performSegueWithIdentifier ...]。

如果您通过故事板执行segue,那么您究竟会解释什么会发生。切换到编程调用后自设置self.indexPathInt

干杯。

+0

谢谢你的答案,但是如何在调用segue之前设置self.indexPathInt? – smnk 2014-10-01 13:22:18

0

如果您直接从行中手动调用viewController,prepareForSegue将在didSelectRowAtIndex路径之前调用。

编辑:

  • 拖动从视图控制器的原因请看你的目标,而不是从该行。

  • 名称如你通常会

  • 设置要在didSelectRowAtIndexPath方法来设置didSelectRowAtIndexPath方法

  • 调用后设置变量的变量的SEGUE:

    [自performSegueWithIdentifier:@ “yourSegueIdentifierString”sender:self];

+0

谢谢你的回答,但是如何在调用segue之前设置self.indexPathInt? – smnk 2014-10-01 13:22:40

+0

请参阅上面的更新回答。 – 2014-10-02 13:59:52