如何找到哪个textField加载了TableView

时间:2016-10-13 13:28:00

标签: ios objective-c uitableview

我有ViewController两个UITextFields。第一个文本字段是区域名称,当点击此文本字段时,它会打开(使用KGModal显示的视图)UITableViewController向服务器发送呼叫并获取并显示区域名称。
第二个文本字段取决于区域文本字段。它是邮政编码字段,当用户选择区域并点击邮政编码字段时,它会发送一个带有区域名称的电话来获取该区域的邮政编码。

我的问题是如何使用相同的表视图控制器类根据发件人文本字段发送不同的调用。我使用KGModal来显示视图。

更新
这是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];
}

那么如何在这里传递发件人?

2 个答案:

答案 0 :(得分:1)

  1. 为每个文本字段存储IBOutlet
  2. 当调用textField DidBeginEditing(或其他任何内容)时,将sender param与IBOutlets进行比较,找出它是哪一个。
  3. 现在您知道它是哪个文本字段,将参数传递给模态以指示是否应搜索区域名称或邮政编码。
  4. <强>更新

    试试这个:

    - (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
        }
    }
    

答案 1 :(得分:1)

像这样定义枚举。

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

现在你的textField委托代码将是这样的

 - (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];
  }