如何在一个MasterViewController上加载2个tableViews?

时间:2014-04-13 22:49:14

标签: ios objective-c uitableview

如何在MasterViewController上加载2个tableView? tableView-method的代码是:

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

    static NSString *CellIdentifier1 = @"Cell";
    static NSString *CellIdentifier2 = @"Cell2";

    UITableViewCell *cell;

    if(tableView == self.tableView)
    {
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1 forIndexPath:indexPath];
        if (cell == nil) {
            cell = [[UITableViewCell alloc]
                    initWithStyle:UITableViewCellStyleDefault
                    reuseIdentifier:CellIdentifier1];
        }

        SKProduct * product = (SKProduct *) _products[indexPath.row];
        cell.textLabel.text = product.localizedTitle;


    [_priceFormatter setLocale:product.priceLocale];
    cell.detailTextLabel.text = [_priceFormatter stringFromNumber:product.price];

    if ([[FlamencompasIAPHelper sharedInstance] productPurchased:product.productIdentifier]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.accessoryView = nil;
    } else {
        UIButton *buyButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        buyButton.frame = CGRectMake(0, 0, 72, 37);
        [buyButton setTitle:@"Buy" forState:UIControlStateNormal];
        buyButton.tag = indexPath.row;
        [buyButton addTarget:self action:@selector(buyButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.accessoryView = buyButton;
    }
    }
    //UITableView *tableView2;
    if(tableView == self.tableView2)
    //else
    {
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2 forIndexPath:indexPath];
        if (cell == nil) {
            cell = [[UITableViewCell alloc]
                    initWithStyle:UITableViewCellStyleDefault
                    reuseIdentifier:CellIdentifier2];
        }

        SKProduct * product = (SKProduct *) _products2[indexPath.row];
        cell.textLabel.text = product.localizedTitle;


        [_priceFormatter setLocale:product.priceLocale];
        cell.detailTextLabel.text = [_priceFormatter stringFromNumber:product.price];

        if ([[FlamencompasIAPHelper sharedInstance2] productPurchased:product.productIdentifier]) {
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
            cell.accessoryView = nil;
        } else {
            UIButton *buyButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            buyButton.frame = CGRectMake(0, 0, 72, 37);
            [buyButton setTitle:@"Buy" forState:UIControlStateNormal];
            buyButton.tag = indexPath.row;
            [buyButton addTarget:self action:@selector(buyButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
            cell.accessoryType = UITableViewCellAccessoryNone;
            cell.accessoryView = buyButton;
        }
    }
    return cell;
}

if(tableView == self.tableView2)之后的代码未执行。如何'声明'tableView2? 我只能加载第一个或第二个tableView。但是我想加载它们。怎么做?

2 个答案:

答案 0 :(得分:0)

您的方法应如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == self.tableView) {
        // All code related to self.tableView
    } else if (tableview == self.tableView2) {
        // All code related to self.tableView2
    } else {
        return nil; // oops
    }
}

还要确保self.tableViewself.tableView2设置正确。也许self.tableView2nil

答案 1 :(得分:0)

我会创建2个tableview数据源类,以避免使主视图控制器成为一个非常长且难以理解的类。如果在同一个类(即MasterViewController)中实现UITableViewDataSource方法,那么在任何地方都会出现多个难以维护和重构的if / else语句。

这将更详细地解释如何将数据源与视图控制器http://www.objc.io/issue-1/lighter-view-controllers.html

分开