gpt4 book ai didi

ios - 如何在tableview和viewcontroller之间传递字符串

转载 作者:行者123 更新时间:2023-11-30 13:04:12 25 4
gpt4 key购买 nike

首先,在todolistviewController中。我有用于填充字符串的文本字段和用于保存字符串的按钮保存以显示在 tableview1 中。这是给我的简单说明。

接下来,我创建放在文本字段上的按钮,当点击文本字段时,将显示 tableview2 来选择 menu1(String)、menu2(String)、menu3(String)。

选择菜单后将返回到todolistviewController并显示在文本字段中选择的菜单。我需要知道如何传递菜单(字符串)以在文本字段中显示。

最佳答案

通常有两种方法可以实现您的目标,即将 NSString 从 TabelView2Controller 传递回 TodoListViewController。

首先,您需要在 TabelView2Controller 中声明一个 NSString 属性 @property (nonatomic, Strong) NSString *selectedMune 并在 UITableViewDelegate 方法中将其更新为您选择的菜单(String) tableView:didSelectRowAtIndexPath:

然后您可以选择以下两种模式之一

  1. 委托(delegate)模式

在 TabelView2Controller 的头文件中定义协议(protocol)。在该协议(protocol)中,定义一个用于在 tableView2Controller 中通知选择更新的方法。

//TableView2Controller.h
@protocol TableView2ControllerDelegate <NSObject>
@required
- (void)updateSelectedMenu:(NSString *)selectedMenu;

@interface TableView2Controller: UITableViewController
@property (nonatomic, strong) NSString *selectedMune;
@property (weak, nonatomic) id<tableView2ControllerDelegate> delegate;
@end

让你的TodoListViewController符合这个协议(protocol)。

您应该将 TodoListViewController 设置为 TableView2Controller 的委托(delegate)。如果您使用 Storyboard,则应该在 TodoListViewController 的方法 performSegueWithIdentifier:sender: 中执行此操作。

然后在 TableView2Controller 的 UITableViewDelegate 方法 tableView:didSelectRowAtIndexPath: 中,您可以调用 updateSelectedMenu: 来通知委托(delegate)您的选择已更改。在TodoListViewController的updateSelectedMenu:方法中,您可以根据输入参数更新您的UI。

  • 通知模式
  • 在 TableView2Controller 中定义 NSNotification。将选定的菜单字符串存储在通知的 userInfo 中,并将此通知发布到 TableView2Controller 的 UITableViewDelegate 方法 tableView:didSelectRowAtIndexPath:

    //TableView2Controller.h
    extern NSString *const TableView2ControllerSelectedMenuDidChangedNotification;
    extern NSString *const TableView2ControllerSelectedMenuKey;

    @interface TableView2Controller: UITableViewController
    @property (nonatomic, strong) NSString *selectedMune;
    @end

    //TableView2Controller.m
    NSString *const TableView2ControllerSelectedMenuDidChangedNotification = @"TableView2ControllerSelectedMenuDidChangedNotification";
    NSString *const TableView2ControllerSelectedMenuKey = @"TableView2ControllerSelectedMenuKey";

    @implementation TableView2Controller
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSDictionary *userInfo = @{TableView2ControllerSelectedMenuKey: self.selectedMune};
    [[NSNotificationCenter defaultCenter] postNotificationName:TableView2ControllerSelectedMenuDidChangedNotification
    object:self
    userInfo:userInfo];
    }
    @end

    在TodoListViewController中注册TableView2ControllerSelectedMenuDidChangedNotification

    // TodoListViewController.m
    - (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(selectedMenuUpdateNotification:)
    name:TableView2ControllerSelectedMenuDidChangedNotification
    object:nil];
    }

    - (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    }

    然后在 TodoListViewController 的 selectedMenuUpdateNotification: 方法中,您可以使用 userInfo 中的 TableView2ControllerSelectedMenuKey 获取更新的 selectedMenu 并相应地更新您的 UI。

    关于ios - 如何在tableview和viewcontroller之间传递字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575179/

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