我正在创建一个新应用,在应用中我想要两个表格视图。一个用于显示列表,另一个用于显示用户从列表中选择的内容。 到目前为止,我已经创建了包含项目的数组,并且我已经获得了彼此之间传递的视图。 我似乎无法获得其他tableview中显示的选定项目。
这是list-tableview中的一些代码(推送'Done'时传递数据)。 viewC是另一个视图的实例,用于访问它。
-(IBAction)dismissValgScene {
for (int i = 0; i < ValgteMedierarray.count; i++) {
NSLog(@"%@", [ValgteMedierarray objectAtIndex:i]);
}
viewC.TilvalgteMedierArray = [NSMutableArray arrayWithArray:ValgteMedierarray];
NSLog(@"1: antal i tilvalgteArray = %lu", (unsigned long)viewC.TilvalgteMedierArray.count);
[viewC.tableView reloadData];
NSLog(@"2: antal i tilvalgteArray = %lu", (unsigned long)viewC.TilvalgteMedierArray.count);
[self dismissViewControllerAnimated:YES completion:nil];
}
这是“完成”按钮的方法,它将所选项目添加到另一个视图中的数组。 (即viewC.TilvalgteMedierArray)
以下是其他视图中的一些代码,应显示所选项目
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [TilvalgteMedierArray count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
// Configure the cell...
cell.textLabel.text = [TilvalgteMedierArray objectAtIndex:indexPath.row];
return cell;
}
希望你们能提供帮助,请让我详细说明你对我的编码不理解的事情:)
(如果在其他地方已经解决了这个问题,我很抱歉,但我一直在寻找数小时而没有找到解决方案)。
编辑:
感谢所有一直想帮助我的人。 :)
我现在通过使用Unwind Segue方法找到了解决方案。 任何有类似问题的人都可以查看这些链接:
如何解开segue: What are Unwind segues for and how do you use them?
如何使用展开segue传递数据: iOS 6 - can i return data when i unwind a segue?
答案 0 :(得分:0)
您的ValgViewController是选择或选择表格视图控制器,允许用户选择将在主表格视图控制器中显示的媒体类型。
您希望Master表视图控制器接收用户从ValgViewController中选择的一系列选项。
要这样做,需要在ValgViewController标头中定义委托协议,并使主表视图控制器符合该协议。
例如,您将在ValgViewController头文件中添加以下内容:
@protocol ValgViewControllerDelegate <NSObject>
-(void)syncChoicesWithArray:(NSArray *)arrayToSync;
@end
@interface ValgViewController : UITableViewController
@property (nonatomic, assign) id <ValgViewControllerDelegate> delegate;
@property (nonatomic, strong) NSMutableArray *MedieValgListeArray, *ValgteMedierarray;
@end
在ValgViewController.m内部,ValgViewController 完成或完成按钮将连接到:
-(IBAction)actionSelectionCompleted:(id)sender {
[self.delegate syncChoicesWithArray:ValgteMedierarray];
// [mc.self sync:ValgteMedierarray];
// [self dismissViewControllerAnimated:YES completion:nil];
}
在您的MasterViewController.m文件中,您可以通过添加以下内容来使MasterViewController采用该协议:
@interface MasterViewController () <ValgViewControllerDelegate>{
// no need for this if performing segues
// ValgViewController *valgV;
}
@end
然后通过以下方式实现委托协议:
#pragma mark - ValgViewController Delegate methods
-(void)syncChoicesWithArray:(NSArray *)arrayToSync{
// Dismiss the ValgViewController model from here
[self dismissViewControllerAnimated:YES completion:nil];
TilvalgteArray = arrayToSync;
NSLog(@"valgte = %i", arrayToSync.count);
NSLog(@"tilvalgte = %i", TilvalgteArray.count);
NSLog(@"%@", [TilvalgteArray objectAtIndex:0]);
[self.tableView reloadData];
}
在prepareForSegue方法中添加Master表视图控制器作为ValgViewController的委托:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString: @"showTilvalgteMedierScene"])
{
ValgViewController *vc = [segue destinationViewController];
vc.delegate = self;
vc.TilvalgteMedierArray = [NSMutableArray arrayWithArray:ValgteMedierarray];
}
}
答案 1 :(得分:-1)
我打赌这里缺少的是正确的协议/委托模式。
您指的是另一个您不应该干预的视图中的数组和属性。限制每个视图以管理自己的事务。
创建协议,使初始视图成为委托,响应对选择的更改或对doneTouched进行响应。因此,基本上您的选择视图将仅监视和修改选择,并在更改或完成更改时向有兴趣的人报告。这个观点不应该知道或关心代表从那里做什么。
阅读代表和协议。