如何在UILabel中显示您在UITableViewCell中选择的内容(didSelectedRowAtIndexPath)

时间:2014-03-03 07:41:15

标签: objective-c uitableview

我正在编写用户必须进入其国家/地区的注册表单。我通过UITableView(Classe ViewController)中的.plist文件列出了这些国家/地区。另外,我使用复选标记设置单个选择。选择国家后,APP必须返回并在国家/地区标签中显示所选行(如正常的注册表格)。

这里是didSelectRowAtIndePath:

下的内容
   -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

// Uncheck the previous checked row
if(self.checkedIndexPath)
{
    UITableViewCell* uncheckCell = [tableView
                                    cellForRowAtIndexPath:self.checkedIndexPath];
    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}
if([self.checkedIndexPath isEqual:indexPath])
{
    self.checkedIndexPath = nil;
}
else
{
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    self.checkedIndexPath = indexPath;
}

感谢您的帮助。

理查德

3 个答案:

答案 0 :(得分:0)

只需像这样添加该行

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

 country.text=uncheckCell.label.text;//add this wherever you want, but it should be in this method only 
}

其中country是您创建的标签。 此外,只有当您的国家/地区和您选择行的表格位于同一个班级时,此行代码才有效,您能否提及如何使您的班级与UITableView所在的位置相同?你的UILabel是?

答案 1 :(得分:0)

如果你的标签和你的桌子在同一个控制器中,你可以这样做:

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

    [self.yourLabel setText:[self.arrayCountries objectAtIndex:indexPath.row]];

}

但是如果你的桌子和你的标签在不同的控制器中,你可以使用NSUserDefaults来保持你的选择:

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

    [[NSUserDefaults standardUserDefaults]setObject:[self.arrayCountries objectAtIndex:indexPath.row] forKey:@"selectedCountry"];

}

并在您的控制器中,您的标签获得此选择

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.labelCountry setText:[[NSUserDefaults standardUserDefaults] objectForKey:@"selectedCountry"]];
}

答案 2 :(得分:0)

据我了解,您应该使用delegates。选择国家/地区后,以先前的形式调用委托函数并设置单元格文本的值。

例如,(未经测试的代码提供一个想法)

if(self.checkedIndexPath)
{
    UITableViewCell* uncheckCell = [tableView cellForRowAtIndexPath:self.checkedIndexPath];
    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}

if([self.checkedIndexPath isEqual:indexPath])
{
    self.checkedIndexPath = nil;
}
else
{
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    self.checkedIndexPath = indexPath;

    // Trigger previous form to get the current form's data
    // Here self.delegate takes address of previous form
    [self.delegate setThisCountryNameToOwnerFormWithText:cell.titleLabel.text];
    // Probably go back like this
    // [self.navigationController popViewControllerAnimated:YES];
}