2016-09-19 62 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代碼? –

    相關問題