2016-10-13 41 views
0

我有個ViewController哪兩個UITextFields。第一個文本字段是區域名稱,當點擊該文本字段時,會打開(使用KGModal顯示的視圖)a UITableViewController,它將呼叫發送到服務器並獲取並顯示區域名稱。
第二個文本字段取決於區域文本字段。這是郵政編碼字段,當用戶選擇區域並點擊郵政編碼字段時,它會發送帶有區域名稱的電話以獲取該區域的郵政編碼。

我的問題是,如何使用相同的表視圖控制器類來發送基於發件人文本字段的不同的呼叫。我正在使用KGModal來顯示視圖。如何找到哪個textField已經加載了TableView

UPDATE:
這裏的UITextField的委託方法,我要送發送者的id

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 

     if (textField==self.areaField) { 
      [self.view endEditing:YES]; 
      [self showTableView:self.areaField]; 
      return NO; 
     } 
     else if (textField==self.zipField) 
     { 
      [self.view endEditing:YES]; 
      [self showTableView:self.zipField]; 
      return NO; 
     } 
     else return YES; 
    } 

而且在我使用它作爲

-(void)showTableView:(id)sender 
{ 
    ServiceEnMTableViewController *ivc = [self.storyboard instantiateViewControllerWithIdentifier:@"CountryVC"]; 

    //ivc.delegate = self; 

    ivc.view.frame = CGRectMake(0, 0, CGRectGetWidth([[UIScreen mainScreen] bounds]) - 40, CGRectGetHeight([[UIScreen mainScreen] bounds]) - 80); 
    [[KGModal sharedInstance] setCloseButtonType:KGModalCloseButtonTypeRight]; 
    [[KGModal sharedInstance] showWithContentViewController:ivc andAnimated:YES]; 
    [[KGModal sharedInstance] setTapOutsideToDismiss:YES]; 
    [[KGModal sharedInstance] setModalBackgroundColor:[UIColor clearColor]]; 
    [[KGModal sharedInstance] setBackgroundDisplayStyle:KGModalBackgroundDisplayStyleSolid]; 
} 

因此,如何通過這裏發送的方法是什麼?

+0

您的代碼是沒有意義的。你有一個回調函數('textFieldShouldBeginEditing')返回2個文本字段之一,你檢查它是哪個文本字段,但不管執行相同的代碼。 'showTableView'現在不知道哪個文本字段是哪個。簡單地按照我在回答中所說的,將'sender'傳遞給'showTableView'並在其中檢查它是哪個文本字段,或者將param更改爲一個布爾值並將其從文本字段回調中傳遞回來 –

+0

但是'showTableView:(id)sender '以'(id)'的形式獲取值。所以基於此我在zip類中創建了一個'@property(strong,nonnull)NSString * callFor;',其中我將傳遞來自area類的字符串值並將其與zip進行比較併發送該調用。我可以將字符串更改爲布爾值來執行相同的操作。這是你說的嗎?請稍微編寫一下,我可能會有更多的想法。 –

+0

請在下面看到更新的答案 –

回答

1

定義枚舉這樣。現在

typedef NS_ENUM(NSUInteger, TextFieldsIdentifier) { 
     kAreaField, 
     kZipField, 
    }; 

您的文本字段代表將是這個樣子

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 

    if (textField==self.areaField) { 
     [self.view endEditing:YES]; 
     [self showTableView:kAreaField]; 
     return NO; 
    } 
    else if (textField==self.zipField) 
    { 
     [self.view endEditing:YES]; 
     [self showTableView:kZipField]; 
     return NO; 
    } 
    else return YES; 
} 

和你的方法showTableView:看起來就像這樣

-(void)showTableView:(TextFieldsIdentifier) textFieldIdentifier{ 
    ServiceEnMTableViewController *ivc = [self.storyboard  instantiateViewControllerWithIdentifier:@"CountryVC"]; 
    //make property like @property(nonatomic,assign) TextFieldsIdentifier textFieldIdentifier; in ServiceEnMTableViewController and assign value 
    ivc.textFieldIdentifier = textFieldIdentifier; 
    //ivc.delegate = self; 

    ivc.view.frame = CGRectMake(0, 0, CGRectGetWidth([[UIScreen mainScreen] bounds]) - 40, CGRectGetHeight([[UIScreen mainScreen] bounds]) - 80); 
    [[KGModal sharedInstance] setCloseButtonType:KGModalCloseButtonTypeRight]; 
    [[KGModal sharedInstance] showWithContentViewController:ivc andAnimated:YES]; 
    [[KGModal sharedInstance] setTapOutsideToDismiss:YES]; 
    [[KGModal sharedInstance] setModalBackgroundColor:[UIColor clearColor]]; 
    [[KGModal sharedInstance] setBackgroundDisplayStyle:KGModalBackgroundDisplayStyleSolid]; 
    } 
+0

我應該如何將它傳遞給下一堂課?我的意思是KGModel是'instantiateViewControllerWithIdentifier',所以我必須在下一個類中創建一個屬性並將它傳遞給'kAreaField'或'kZipField'? –

+0

@TalhaChi更新了我的答案,請檢查 – Burhan

1
  1. 爲每個文本字段存儲一個IBOutlet
  2. 當調用textField DidBeginEditing(或其他)時,將sender參數與IBOutlets進行比較,以找出它是哪一個。
  3. 既然您知道它是哪個文本字段,請將參數傳遞給模式以指示是否應搜索區域名稱或郵政編碼。

更新

試試這個:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    [self showTableView:textField]; 
    return NO; 
} 

- (void)showTableView:(id)sender { 
    if (sender == self.areaField) { 
     // Tell tableView to load area data 
    } 
    else if (sender == self.zipField) { 
     // Tell tableView to load zip data 
    } 
} 
+0

'[self showTableView:sender];'使用未聲明的標識符'sender' –

+1

@TalhaCh這是一個錯字,當然你注意到'textFieldShouldBeginEditing'只有1個參數? –

相關問題