gpt4 book ai didi

ios - 在 View Controller 之间传递行选择

转载 作者:可可西里 更新时间:2023-11-01 06:18:57 24 4
gpt4 key购买 nike

使用 Storyboard,我目前有一个静态的 Uitableview。当用户从父 TableView 中选择一行时,会显示一个新的 TableView ,其中包含一些选项。一旦用户从新 TableView 中选择一行,我想关闭该表并显示父 View Controller 并将用户选择显示在单元格中。几乎是表单的 radio 选择。

我是否处理了 View Controller 的解除以及 View 内数据的传递是否会出现,或者是否在索引路径中选择了行?我在这上面停留了一段时间。

最佳答案

使用delegation . subview Controller 定义了父 View Controller 实现的委托(delegate)协议(protocol)。父 View Controller 在显示 subview Controller 之前,将自己设置为 subview Controller 的委托(delegate)。当用户在 subview 中选择了一行或任何内容时, subview Controller 调用其委托(delegate)的方法并自行关闭。


我为您写了一个示例代码:https://github.com/vikingosegundo/StateSelection

父 View Controller 是 MasterViewController。
subview Controller 是 StateSelectionViewController。

  • StateSelectionViewController 在它的 header 中定义了一个协议(protocol):StateSelectionDelegate并有一个委托(delegate)属性 id<StateSelectionDelegate> delegate .

    @protocol StateSelectionDelegate <NSObject>
    -(void) selectedState:(NSString *)state forNation:(NSString *)nation;
    @end
  • MasterViewController 符合这个协议(protocol),它实现了唯一的委托(delegate)方法selectedState:forNation: .

    -(void)selectedState:(NSString *)state forNation:(NSString *)nation
    {
    self.statesDictionray[nation] = state;
    [self.tableView reloadData];
    }
  • 在 MasterViewController 的 prepareForSegue: 期间,它为自己设置了目标 View Controller 的委托(delegate),恰好是 StateSelectionViewController。

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSString *selectedNation =[[[self.tableView cellForRowAtIndexPath:indexPath] textLabel] text];
    [[segue destinationViewController] setSelectedNation:selectedNation];
    [[segue destinationViewController] setDelegate:self];
    }
    }
  • 现在执行 segue 并显示 StateSelectionViewController 的 TableView 。

  • 一旦用户点击其中一行,StateSelectionViewController 将调用

    [self.delegate selectedState: <theState> forNation: <theNation>];

    并解雇或弹出自己。请注意用于确定 Controller 呈现方式的开关。

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
    [self.delegate selectedState:stateDictionary[_selectedNation][indexPath.row] forNation:_selectedNation];
    if(self.presentingViewController)
    [self dismissViewControllerAnimated:NO completion:NULL];
    else
    [self.navigationController popViewControllerAnimated:YES];

    }

关于ios - 在 View Controller 之间传递行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com