iOS - 如何防止我的所有标题发生变化

时间:2014-05-14 19:11:07

标签: ios objective-c uitableview

现在我有一种弹出选择器,以便用户可以在我的屏幕上选择一个选项。请参阅 this sample project了解我的意思。

我使用与此示例相同的方法,只是我有三个不同的按钮,用户将选择。我的问题是我使用的是这段代码:

- (void)itemSelectedatRow:(NSInteger)row
{
    NSLog(@"row %lu selected", (unsigned long)row);
    [self.selectSeverity setTitle:[self.severityArray objectAtIndex:row] forState:UIControlStateNormal];
    [self.selectStatus setTitle:[self.statusArray objectAtIndex:row] forState:UIControlStateNormal];
    [self.selectGender setTitle:[self.genderArray objectAtIndex:row] forState:UIControlStateNormal];
}

...每次用户选择按钮时,它都会更改所有三个按钮的名称。因此,例如,如果用户点击“selectSeverity”按钮,并选择第三行上的项目,则selectStatus和selectGender按钮的名称也将更改为其自己相应数组上第三行的项目。

我需要做的是以某种方式分离这个方法,这样只有在自己的数组中选择了一行时,按钮的标题才会改变:我该怎么做?

更多信息: 我将这些tableView嵌入到导航控制器中: statusViewController.m / .H genderViewController.m / .H pickerViewController.m / .h(这对应于Severity按钮)

每个代表都有一个单独的ID,但内容相同:

@protocol correspondingViewControllerDelegateHere <NSObject>
@required
    - (void)itemSelectedatRow:(NSInteger)row;
@end

@interface correspondingViewControllerHere : UITableViewController
@property (strong, nonatomic) NSArray *correspondingArrayHere;
@property (assign, nonatomic) id<statusViewControllerDelegate> delegateIdHere;
@end

每个.m文件中的内容都相同,但对应于自己的委托,数组等。

@implementation statusViewController

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.statusData.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"CellIdentifierHere";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
    cell.textLabel.text = [self.statusData objectAtIndex:indexPath.row];

    return cell;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];

if ([self.delegateIdHere respondsToSelector:@selector(itemSelectedatRow:)]) {
    [self.delegateIdHere itemSelectedatRow:indexPath.row];
    [self dismissViewControllerAnimated:YES completion:nil];
    }
}

@end

在manualViewController.h中(这是实现它们的视图)我已经声明了委托。 最后,在文件manualViewController.m中,我有以下代码来实现它们:

- (IBAction)showinfo:(id)sender
{
UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"pickerVC"];
pickerViewController *tableViewController = (pickerViewController *)[[navigationController viewControllers] objectAtIndex:0];
tableViewController.severityData = self.severityArray;
tableViewController.navigationItem.title = @"Triage Severity Levels";
tableViewController.delegate1 = self;
[self presentViewController:navigationController animated:YES completion:nil];
}


- (IBAction)showStatus:(id)sender {
UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"statusVC"];
statusViewController *tableViewController = (statusViewController *)[[navigationController viewControllers] objectAtIndex:0];
tableViewController.statusData = self.statusArray;
tableViewController.navigationItem.title = @"Triage Severity Levels";
tableViewController.delegate3 = self;
[self presentViewController:navigationController animated:YES completion:nil];
}

- (IBAction)showGender:(id)sender {
UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"genderVC"];
genderViewController *tableViewController = (genderViewController * [[navigationController viewControllers] objectAtIndex:0];
tableViewController.genderData = self.genderArray;
tableViewController.navigationItem.title = @"Triage Severity Levels";
tableViewController.delegate2 = self;
[self presentViewController:navigationController animated:YES completion:nil];
}

正如我之前所说,我认为代码位于itemSelectedAtRow。有人可以帮我分开这个方法,这样一个项目的选择不会影响另一个项目的选择吗? 感谢

1 个答案:

答案 0 :(得分:1)

一种解决方案是将协议更改为需要三种不同的方法

@protocol correspondingViewControllerDelegateHere <NSObject>
@required
    - (void)itemSelectedSeverityAtRow:(NSInteger)row;
    - (void)itemSelectedStatusAtRow:(NSInteger)row;
    - (void)itemSelectedGenderAtRow:(NSInteger)row;
@end

然后在manualViewController中实现三个方法,并从每个其他视图控制器调用适当的方法。