我正在尝试在UISegmentedControl
组中获得UITableViewCell
,就像设置应用程序中的wifi设置一样。我遇到的问题是我有双边框。我为UISegmentedControl
获得了一个边框,为UITableViewCell
获得了一个边框。
我猜我需要从UITableViewCell
删除边框。我怎么能这样做?
答案 0 :(得分:7)
我刚才注意到这仍然得到答案。碰巧我必须为另一个项目做这个,因为我问了这个问题,我已经学到了很多关于iPhone开发的知识。这是我最近解决的问题。这一切都与使框架尺寸正确有关。这应该用于标准表。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if(cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"] autorelease];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(-1.0f, -1.0f, 302.0f, 46.0f)];
[cell.contentView addSubview:segmentedControl];
答案 1 :(得分:3)
在Wi-Fi设置的情况下,我怀疑他们所做的是“忘记此网络”按钮,“IP地址”标签和“DHCP / BootP /静态”分段控制所有部分表的标题视图。如果您需要在表格中间执行此操作(而不是在顶部或底部,您分别使用tableHeaderView
和tableFooterView
属性),我建议您使用使用-tableView:viewForHeaderInSection:
或相应的-tableView:heightForHeaderInSection
变体委托方法Footer
。使用其中任何一个,您可以为表格视图的“部分”设置自定义视图(使用清晰的背景颜色或[UIColor groupTableBackgroundColor]
),其中包含标签和分段控件,以便它们匹配与其余的表格部分。
答案 2 :(得分:2)
使用this post中的技术删除UITableViewCell的背景不透明度对我来说更容易让我只能在表格行中显示UISegmentedControl。
答案 3 :(得分:1)
我对此稍微进一步了解。到目前为止,我已经将UITableViewCell子类化了。我在其中创建了一个带有UISegmentedControl的笔尖,我将UITableViewCell背景alpha设置为0.它仍然看起来不太正确,但它比以前更好。
答案 4 :(得分:1)
我的解决方案是允许分段控件调整大小以适应,并在tableView:willDisplayCell:forRowAtIndexPath:
中隐藏表格视图的背景。
这会产生与“Settings.app> WiFi>您的网络> IP地址”分段控制相同的结果,而无需对任何布局指标进行硬编码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
UISegmentedControl *control = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"One", @"Two", @"Three", nil]];
control.segmentedControlStyle = UISegmentedControlStylePlain;
control.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
control.frame = cell.contentView.bounds;
[cell.contentView addSubview:control];
[control release];
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundView.alpha = 0.0;
}
答案 5 :(得分:0)
诀窍似乎是将UISegmentedControl的大小调整为控件backgroundView
的大小,而不是contentView
。我能够通过以下方式以编程方式完成它:
// Size to cover the entire background
self.contentView.frame = self.backgroundView.frame;
self.myControl.frame = self.contentView.bounds;
请注意,如果您使用的是附件,则还需要考虑accessoryView
。
原因是视图层次结构如下:
self
(UITableViewCell或子类)
backgroundView
contentView
accessoryView
在纵向布局中,backgroundView
的框架为{{9, 0}, {302, 44}}
,而contentView
的框架稍微小一些,位于{{10, 1}, {300, 42}}
。当表格样式分组时,这会为单元格提供1px“边框”。您必须调整控件contentView
和的大小才能获得合适的大小。
(注意:虽然Apple实际上在UISegmentedControl的UICatalog示例代码项目中有几个the SDK的示例,但他们通过使用UIViewController来有效地“欺骗”将主视图的背景颜色设置为表格背景颜色。)