我想在我的iPhone App中创建这样的视图:
我不知道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];
但是我怎样才能使它像图片中的那个视图一样工作?
答案 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];
通过界面构建:
<强> 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
有些时候,您只想在特定视图中更改一个特定标签,这在任何现成的解决方案中都不容易。
答案 2 :(得分:1)
查看UITableView部分。这就是将这些团体分开的原因。