UITableView选择了行加载新变量的视图

时间:2013-03-22 09:17:58

标签: ios objective-c xcode xcode4.5

我的ViewController1上有一个UITableView。选择后,它会加载ViewController2,带有一个变量(我声明为“passData”),同时带有所选行的相应行的名称。在测试代​​码的可用性时,我将“passedData”分配给ViewController2上的标签:

label.text = "passedData";

很好用。 ViewController1中我的tableview中的列表具有从具有临时命名约定的数组加载的行: 摘要,报告,细节等。

所以这个想法是当选择“Summary”时,它会加载ViewController2然后加载与SummaryViewController相关的另一个子视图。在尝试让ViewController2识别要加载哪个视图控制器时,我在-(void) viewDidLoad:

中执行了此操作
NSString *viewtoload = passedData;
    if (viewtoload == "Summary") {
        //Load summaryViewController
    }
    elseif (viewtoload == "Report") {
        //Load reportViewController
    }
    elseif (viewtoload == "Detail") {
        //Load detailViewController
    }

我收到了这个错误:

1. Implicit conversion of a non-objective-C pointer type 'char *' to 'NSString *' is disallowed with ARC.
2. Result of comparison against a string literal is unspecified (use strncmp instead)
3. Comparison of distinct pointer types ('NSString *' and 'char *')

我的问题是:

1)这是一种正确的方法还是有更好的方法?

2)我如何解决上面的错误?

3)加载另一个子视图的语法是什么?

我提前感谢你们。

2 个答案:

答案 0 :(得分:1)

如果要根据所点击的单元格加载不同的视图控制器,则应在

中执行此操作
//handle selections of cell in specified row and section of table view
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //switch row
    switch(indexPath.row)
    {

        case:0
        {
            //Detail row
            Detail01 *viewController = [[Detail01 alloc] init];
            viewController.somePassedInData = theDataToPass;
            [self presentViewController:viewController animated:YES completion:nil];
            break;
        }
        case:1
        {
            //Report row
            Report01 *viewController = [[Report01 alloc] init];
            viewController.somePassedInData = theDataToPass;
            [self presentViewController:viewController animated:YES completion:nil];
            break;
        }
        case:2
        {
            //Summary row
            //Alloc and init VC here
            Summary01 *viewController = [[Summary01 alloc] init];
            viewController.somePassedInData = theDataToPass;
            [self presentViewController:viewController animated:YES completion:nil];
            break;
        }
        default:
        {
            break;
        }
    }

    //deselect table cell
    [_tableView deselectRowAtIndexPath:indexPath animated:YES];
}    

然后,您可以在推入导航控制器

之前在VC中设置任何属性

答案 1 :(得分:0)

使用正确的objective-c字符串文字@""而不是""