我希望能够在我正在制作的应用的表格视图之间共享数据。这样做的原因是我希望能够告诉子视图选择了哪个表行,这样我就不必制作一堆视图,我可以测试一下整数变量是什么。我观看了有关如何执行此操作的视频教程,但他们没有使用tableviews。所以,当我尝试这个时,似乎没有用。我使用app委托作为“数据中心”来保存变量,然后我尝试在didSelectRowAtIndexPath
方法中为变量赋值。 (通过它只是共享应用程序的方式推动新视图工作正常)
这是第一个tableview的代码,我将变量分配给一个数字。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
ApplicationAppDelegate *appDelegate = (ApplicationAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.rowPicked = row;
SecondLevelViewController *nextController = [self.controllers objectAtIndex:row];
[self.navigationController pushViewController:nextController animated:YES];
}
在app委托中我做了这个并且我在.m文件中合成了它:
@property (nonatomic) NSInteger rowPicked;
和我需要的其他NSIntegers一样。 有什么建议?如果您认为我这样做完全错了,请您通过具体说明或链接到网站或视频教程来启发我吗? 谢谢大家!
答案 0 :(得分:1)
以下是我通常如何做到这一点:
AppDelegate
。列表和细节的逻辑和模型数据应该存在于有意义的类中。在这种情况下,我们将使用列表和详细信息视图控制器类本身。UITableViewCell
sublcass。在那个sublcass中,我将创建一个容纳“实体”的ivar或者单元格显示其信息所需的任何数据。这可以是NSManagedObject
甚至是NSDictionary
。UITableViewCell
上设置数据时,它会更新单元出口以正确显示它。请注意我如何保持单元格如何完全包含在子类中的逻辑。在整个应用程序中执行此类操作以促进代码清洁和组织非常重要。tableView:didSelectRowAtIndexPath
方法中,您将调用UITableView类“cellForRowAtIndexPath:
方法”以返回所选的单元格。然后,您可以将其强制转换为UITableViewCell
子类,并获取您之前设置的实体信息。tableView:didSelectRowAtIndexPath:
方法设置此变量。希望这有帮助!
答案 1 :(得分:0)
它真的很糟糕。更好的是将id<$YOUR_PROTOCOL> delegate
添加到SecondLevelViewcontroller
并设置nextController.delegate = self
。
协议看起来像
@protocol RowAccessProtocol
@optional
-(NSUInteger)selectedRow;
@end
必须创建当前的tableViewController:
@protocol RowAccessProtocol;
@class FirstLevelTableViewController:UITableViewController<RowAccessProtocol>
…
@end
并实施:
…
-(NSUInteger)selectedRow{
return [self.tableView indexPathForSelectedRow].row;
}
在SecondLevelViewController中,您可以调用[self.delegate selectedRow]
来获取所选行。