分组UITableView - 复制“设置”应用程序表视图

时间:2012-10-07 23:00:10

标签: ios objective-c iphone xcode uitableview

我想在我的iPhone App中创建这样的视图:

enter image description here

我不知道iOS中的这个控件是什么,也许我可以在左侧设置一个图标和文本,在右侧设置一个小符号。

我已经实现了一个TableView,在那里我可以设置这些东西,如:

    [[cell textLabel] setText:customer.name];
    [[cell textLabel] setTextColor:[UIColor blackColor]];
    [[cell imageView] setImage:[UIImage imageNamed:@"icon.png"]];
    //[[cell detailTextLabel] setText:@"Awsome weather idag"];
    cell.accessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];  

但是我怎样才能使它像图片中的那个视图一样工作?

3 个答案:

答案 0 :(得分:2)

这很简单,请按照以下步骤操作,如有疑问,请查看UITableView documentation

<强> 1。创建分组表视图:

编程:

CGRect tableFrame = CGRectMake(0, 0, 200, 200);

UITableView *tableView = [[UITableView alloc] initWithFrame:tableFrame style:UITableViewGroupedStyle];
tableView.delegate = self;
tableView.dataSource = self;

[self.view addSubview:tableView];

分配UITableViewController子类(常见情况):

MyTableViewController *controller [[MyTableViewController alloc] initWithStyle: UITableViewGroupedStyle];

[self.navigationController pushViewController:controller animated:NO];

通过界面构建​​:

  1. 展开“实用工具”菜单(右上角图标);
  2. 选择您的表格视图(点击它);
  3. 单击属性检查器(右上角第四个图标);
  4. 在表视图下,单击样式下拉列表并选择分组。
  5. <强> 2。实现UITableViewDataSource协议:

    基本上将这三个功能添加到控制器中。

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    
        // Return the number of sections.
    
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
        // Return the number of rows in a given section.
    
        return 5;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        // Configure the cells.
    
        return cell;
    }
    

    第3。配置单元格:

    UITableViewCell的默认样式有一个图像视图(UIImageView),一个标题标签(UILabel)和一个附件视图(UIView)。您需要在所提供的图像中复制表格视图。

    所以,你在tableView:cellForRowAtIndexPath:中找到这样的东西:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString * const cellIdentifierDefault = @"default";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifierAccount];
    
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierAccount];
        }
    
        if (indexPath.section == 0) {
    
            cell.imageView.image = [UIImage imageName:@"bluetooth_icon"];
            cell.textLabel.text = @"Bluetooth";
    
            // Additional setup explained later.
    
        }else{
    
            if (indexPath.row == 0) {
    
                cell.imageView.image = [UIImage imageName:@"general_icon"];
                cell.textLabel.text = @"General";
                cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
            }else{
    
                cell.imageView.image = [UIImage imageName:@"privacy_icon"];
                cell.textLabel.text = @"Privacy";
                cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
            }
    
        }
    
        return cell;
    }
    

    属性accessoryType定义将在单元格的右侧显示的内容,可以找到附件类型列表here

    在第一个单元格(蓝牙)中,您需要创建自定义附件视图并将其分配给单元格的accessoryView属性。下面给出了一个如何实现这一目标的非常天真的例子:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString * const cellIdentifierDefault = @"default";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifierAccount];
    
        if (cell == nil) {
    
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierAccount];
    
            label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
            label.textAlignment = NSTextAlignmentRight;
    
            cell.accessoryView = label;
    
        }else{
    
            label = (UILabel *) cell.accessoryView;
    
        }
    
        cell.imageView.image = [UIImage imageName:@"bluetooth_icon"];
        cell.textLabel.text = @"Bluetooth";
        label.text = @"Off";
    
        return cell;
    }
    

    希望这会有所帮助,马特乌斯

答案 1 :(得分:2)

对于快速输出,您可以使用某些库 https://github.com/escoz/QuickDialog

protip,根据我的经验,这样的解决方案会让您在更改时更加纠结。

有些时候,您只想在特定视图中更改一个特定标签,这在任何现成的解决方案中都不容易。

答案 2 :(得分:1)

查看UITableView部分。这就是将这些团体分开的原因。