2015-03-19 62 views
0

我是iOS新手。我正在构建一个示例项目。我的项目中有四个viewController。第一个有两个文本框。一个是进入国家,另一个是进入城市。点击他们每个人,推到第二个viewController完成。在第二,第三和第四个viewControllers中,我在它们中都有tableViews。如何知道通过点击哪个文本框,推送完成

第二个viewController中的表视图我有一个国家的列表,第三个viewController中的表视图我有一个状态列表和第四个viewController中的表视图我有一个城市列表。

点击每个桌面视图的单元格,就会完成下一个。

现在我的要求是,当我点击国家textfield时,推送只会完成到第二个viewController,当我点击城市时,textField推送将完成到第四个viewController。

我想知道的是,如何知道从哪个文本字段推送完成。

任何帮助表示赞赏。提前致谢。

这是我第一次的viewController实现文件...

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.txtCity.delegate = self; 
    self.txtCountry.delegate = self; 
} 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
    if (textField.tag == 1) { 
     [self performSegueWithIdentifier:@"countryScene" sender:self]; 
    } else{ 
     [self performSegueWithIdentifier:@"countryScene" sender:self]; 
    } 
    return YES; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

这是我第二次的viewController实现文件..

#import "CountryViewController.h" 

@interface CountryViewController() 

@end 

@implementation CountryViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    self.arrCountries = @[@"India", @"Bangladesh", @"Australia", @"New Zealand", @"South Africa", @"West Indies", @"Sri Lanka", @"England", @"Argentina", @"Brazil"]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"countryCell"]; 

    UILabel *lblCountry = (UILabel*)[cell.contentView viewWithTag:3]; 
    lblCountry.text = [self.arrCountries objectAtIndex:indexPath.row]; 

    return cell; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    return [self.arrCountries count]; 

} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [self performSegueWithIdentifier: @"stateScene" sender: self]; 
} 

@end 

这是我第三的viewController实现文件:

#import "StateViewController.h" 

@interface StateViewController() 

@end 

@implementation StateViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    self.arrStates = @[@"West Bengal", @"Uttar Pradesh", @"Madhya Pradesh", @"Jharkhand", @"Bihar", @"Tamilnadu", @"Myanmar", @"Arunachal Pradesh", @"Assam", @"Goa"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"stateCell"]; 

    UILabel *lblStates = (UILabel*)[cell.contentView viewWithTag:4]; 
    lblStates.text = [self.arrStates objectAtIndex:indexPath.row]; 

    return cell; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    return [self.arrStates count]; 

} 

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

    [self performSegueWithIdentifier: @"cityScene" sender: self]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

这是我的第四个viewController实现文件...

#import "CityViewController.h" 

@interface CityViewController() 

@end 

@implementation CityViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
self.arrCities = @[@"Kolkata", @"Bangalore", @"Chennai", @"Mumbai", @"Hyderabad", @"Mangalore", @"New York", @"London", @"Rio de Janeiro", @"Buenos Aires"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cityCell"]; 

    UILabel *lblCities = (UILabel*)[cell.contentView viewWithTag:5]; 
lblCities.text = [self.arrCities objectAtIndex:indexPath.row]; 

    return cell; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    return [self.arrCities count]; 

} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [self performSegueWithIdentifier: @"showRecipeDetail" sender: self]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

回答

0

好的,

创建保持所述选定文本字段中的标签的一个实例变量。

@interface ViewController() { 
    NSInteger tagSelectedTextField; 
} 

在你第一次ViewController,使用setTag:方法标记指定给您的TextField。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    [self.textCity setTag:1]; 
    [self.textCountry setTag:2]; 
    self.txtCity.delegate = self; 
    self.txtCountry.delegate = self; 
} 

现在,当你在你的委托中,检查标签并相应地执行segue。

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


    if (textField.tag == 1) { 

     [self performSegueWithIdentifier:@"cityScene" sender:self]; 
    } else{ 

     [self performSegueWithIdentifier:@"countryScene" sender:self]; 
    } 
    tagSelectedTextField = textField.tag; 
    return YES; 
} 

现在,当你回到这个屏幕或使用通知系统,使用该标签采用[self.view viewWithTag:tagSelectedTextField]找回您选择的文本字段,并相应地更新文本。

+0

我想你还没有理解我的问题。我的问题是,当我在每个textField中点击时,将会对名为countryScene的viewController进行推送。但是,当我来自国家textfield时,推送只会到达乡村场景,当我来自城市textField时,推送将完成到最后一个viewController,即cityScene。 实际上,在我的项目中,我希望使用nsnotificationcenter从tableviews中选择textFields的数据。 – iPeter 2015-03-19 06:09:39

+0

但是你说如果你点击第二个文本字段,它应该直接推送到第四个视图控制器,即城市视图控制器。如果您点击国家/地区的文本字段,上面的答案会推送到国家/地区视图控制器,否则将直接推送到城市视图控制器 – 2015-03-19 06:11:50

+0

请参阅我编辑的评论! @Sunelwala – iPeter 2015-03-19 06:12:39

0

我想你已经给了标签textfield.If标签是1个,那么国家文本框,否则它的城市textfield.By识别标签U可以切换到相应的视图控制器。

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

if (textField.tag == 1) { 
//Country view Controller 
[self performSegueWithIdentifier:@"countryScene" sender:self]; 
} 
else{ 
//City View Controller 
[self performSegueWithIdentifier:@"cityScene" sender:self]; 
} 

    return YES; 
} 
相关问题