2016-09-19 60 views
0

首先,在todolistviewController。我有用于填充字符串的textfield和用于保存字符串的buttonSave,以在tableview1中显示。这个简单的笔记给我。如何在tableview和viewcontroller之间传递字符串

接下来,我创建按钮放在文本框上,当点击文本框将显示tableview2为pick menu1(String),menu2(String),menu3(String)。

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

回答

0

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

首先,你需要在TabelView2Controller @property (nonatomic, strong) NSString *selectedMune中的UITableViewDelegate方法tableView:didSelectRowAtIndexPath:

然后声明一个NSString财产,并更新到您选择的菜单(字符串),您可以选择以下两种模式之一

  1. 代理模式

定义您TabelView2Controller的头文件的协议。在该协议中,定义用于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符合此协议。

您应该将TodoListViewController设置为TableView2Controller的代理。如果您正在使用Storyboard,则应该在TodoListViewController的方法performSegueWithIdentifier:sender:中执行此操作。

然后在TableView2Controller的UITableViewDelegate方法tableView:didSelectRowAtIndexPath:中,您可以拨打updateSelectedMenu:来通知代表您的选择已更改。并且在TodoListViewController的updateSelectedMenu:方法中,您可以根据输入参数更新您的UI。

  • 通知模式
  • 在TableView2Controller定义NSNotification。在TodoListViewController的selectedMenuUpdateNotification:方法TodoListViewController存储选定的菜单字符串中通知的用户信息,并在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 
    

    注册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]; 
    } 
    

    然后,你可以得到更新selectedMenu在userInfo中使用TableView2ControllerSelectedMenuKey并相应地更新您的UI。

    +0

    ohh.thank you so much。 –

    +0

    我有想法,但你可以有示例swift代码? –

    相关问题