【发布时间】:2014-06-19 16:49:15
【问题描述】:
在开始之前,我必须指出通常的免责声明:我是 Objective-C 和 Xcode 的新手,因此我的问题可能很愚蠢——提前道歉。但是我们开始了:
我有三个不同的数组:
NSArray *parameter_array_1 = @[1,2,3,4]
NSArray *parameter_array_2 @[a,b,c,d]
NSArray *parameter_array_3 = @[1a,2b,3c,4d]
我想从根表视图控制器进入一个表视图控制器,显示每个数组,但一次只显示一次。我的问题是我只想使用一个表视图控制器(而不是三个不同的),但是一旦我调用委托返回选定的值,我就无法识别返回数组。
我想出了一个非常丑陋的解决方案,但我想听听其他想法和建议。
第 1 步:在 prepareForSegue 中,我在根 VC 和目标 VC 中都设置了一个标识符
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([sender isKindOfClass:[UITableViewCell class]])
{
if ([segue.identifier isEqualToString:@"toSelection"] )
{
UITableViewCell *cell = (UITableViewCell *)sender;
PTOptionViewController *targetVC = [segue destinationViewController];
targetVC.delegate = self;
if ([cell.reuseIdentifier isEqualToString:SEGUE_ARRAY_1])
{
targetVC.identifier = SEGUE_ARRAY_1;
targetVC.array1 = self.array1;
}
if ([cell.reuseIdentifier isEqualToString:SEGUE_ARRAY_2])
{
targetVC.identifier = SEGUE_ARRAY_2;
targetVC.array2 = self.array2;
}
if ([cell.reuseIdentifier isEqualToString:SEGUE_ARRAY_3])
{
targetVC.identifier = SEGUE_ARRAY_3;
targetVC.array3 = self.array3;
}
}
}
第 2 步:
在目标 tableview 控制器中,我使用相同的标识符来确定委托回调方法并完成
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self.identifier isEqual:SEGUE_ARRAY_1]) [self.delegate returnArray1Object];
if ([self.identifier isEqual:SEGUE_ARRAY_2]) [self.delegate returnArray2Object];
if ([self.identifier isEqual:SEGUE_ARRAY_3]) [self.delegate returnArray3Object];
}
第 3 步: 在根视图控制器中,我有那些返回方法,然后允许我根据返回采取单独的操作。
我的问题:我是新手,但即使对我来说,这似乎也非常笨重和麻烦。它可能适用于两个或三个参数,但不能缩放并且容易出错。但有替代方案吗?我不想为每个参数创建一个新的表视图控制器和 segue?
有没有办法将数据传递给表视图控制器并捕获返回值,但使表视图控制器足够抽象,以便我可以为不同的数组调用它?也许有办法根据发送者确定委托方法?
提前致谢。
【问题讨论】:
标签: ios objective-c uitableview