0

我正在尝试制作一个非常基本的设置应用程序,用户在 UIViewController 上设置 5 个选项,然后根据所选选项执行一个功能。其中 3 个选项位于包含 UITableView 的容器中。When a cell from the table view is selected, a new view controller is shown with options for that cell (ie user selects "Metal" from the table, and then "Steel" from a new detail view controller). 选择值后,使用Undind segue显示了UiviewContoller/parent视图,“金属”行的详细文本应在容器表中显示“钢”

单元格选择 segue 工作正常,并且 NSLog 显示所选选项被正确存储。问题是我不知道如何将详细文本标签设置为新设置的变量。我需要什么代码从 UIViewController 在容器表上设置详细文本标签?

一些额外的信息:我的 unwind segue 回到两个视图控制器。如果我展开到容器内的表格,则 segue 不适用于行选择。

这是设置选择中的 prepareForSegue 代码(在我的示例中显示“Steel”的视图控制器)

//Sets selected metal on row selection
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:  (UITableViewCell *)sender {
NSIndexPath *selectedIndexPath = [self.tableView  indexPathForSelectedRow];
UITableViewCell *cell = [self.tableView  cellForRowAtIndexPath:selectedIndexPath];
self.selectedMetal = cell.textlabel.text;
NSLog (@"%@", self.selectedMetal);
}

这是我的 unwind segue 的代码,一旦选择了详细信息行就会执行:

-(IBAction) unwindToParentView:(UIStoryBoardSegue *)segue{
MetalTableViewController *child = (MetalTableViewController *) segue.sourceViewController;
//Trying to reference the container table here
OptionTableViewController *optionTable = [[OptionTableViewController alloc] initWithNibName:@"OptionTableViewController bundle:nil];
//Have a table view cell in the .h set as an IBOutlet that I'm trying to set here
optionTable.cell1.detailTextLabel.text = child.selectedMetal;

更新

这个问题肯定与我正在创建的 OptionTableViewController 的新实例有关。我可以在其 viewDidLoad 方法中为我的容器表视图控制器手动设置 detailTextLabel 的值,但是当我尝试 NSLog 的 optionTable.detailTextLabel.text 的值时,它返回一个(空)值,这意味着我有一些奇怪的东西在我的展开块中,或者我没有正确传递 selectedMetal 变量。

4

1 回答 1

0

为了解决这个问题,我稍微改变了我的初始设计,并将我的所有选项都放在了一个表格视图控制器中。现在我的 segues 工作正常,我在控制器之间传递数据没有任何问题。如果有人可以为原始问题提出解决方案(将数据从父视图传递到它的嵌入式容器视图),我很乐意试一试,如果可行,我会很乐意为答案投票。

于 2015-06-25T14:53:40.070 回答