我搜索了论坛,但还没有找到适合我的情况的任何内容。我在这方面仍然是新手,所以这可能很简单,但我似乎无法弄清楚。UITableViewCell中的UISegmentedControl - 表重新加载时分段控件消失
我有一个UITableViewController有几个部分。我创建了一个名为SSSDataEntryCell的自定义类,允许用户输入文本。但是,在其中一个单元格中,我想用UISegmentedControl替换它。该代码在第一次显示表格时出现(控件出现,我可以选择一个段并更改值),但对于任何类型的重新加载事件(旋转,滚动单元格不可见等),分段控制不再出现。
我是否需要每次都重新创建分段控件?这似乎效率低下,特别是因为它是一个伊娃。我曾尝试在添加之前释放单元格的子视图,并在stackoverflow上提供了其他一些建议,但似乎没有解决这个问题。提前致谢!
这里是我的.h的相关部分
@interface SSSEditDetailViewController : UITableViewController <UITextFieldDelegate>
{
// lets us set the sex (male, female)
UISegmentedControl *sexSwitch;
}
这里是.M
- (void)viewDidLoad
{
[super viewDidLoad];
// Load the NIB file for our custom cell
UINib *nib = [UINib nibWithNibName:@"SSSDataEntryTableCell" bundle:nil] ;
// Register the NIB which contains the cell
[[self tableView] registerNib:nib forCellReuseIdentifier:@"SSSDataEntryTableCell"] ;
//
// set up the sex switch if needed
//
if (sexSwitch == nil)
{
NSArray *values = [[NSArray alloc] initWithObjects:kSSSMale, kSSSFemale, nil] ;
sexSwitch = [[UISegmentedControl alloc] initWithItems:values] ;
[sexSwitch addTarget:self action:@selector(changeSex:)
forControlEvents:UIControlEventValueChanged] ;
[sexSwitch setSegmentedControlStyle:UISegmentedControlStyleBar] ;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
SSSDataEntryTableCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SSSDataEntryTableCell"] ;
if ([indexPath section] == 0)
{
[[cell dataField] setDelegate:self] ;
[[cell dataField] setOurPath:indexPath] ;
[[cell dataField] setText:[person name]] ;
[[cell dataField] setPlaceholder:@"Name"] ;
}
else if ([indexPath section] == 1)
{
// Sex switch;
[cell setAccessoryType:UITableViewCellAccessoryNone] ;
// get cell frame and put the sex switch in its place
[sexSwitch setFrame:[cell frame]] ;
[sexSwitch setAutoresizingMask:UIViewAutoresizingFlexibleWidth] ;
[[cell contentView] addSubview:sexSwitch] ;
}
return cell ;
}
谢谢,这修复了消失的开关问题。但是,现在出现了一个奇怪的问题,即在旋转时,调整大小的开关在右侧变得太大(向屏幕的边界移动)。如果我旋转回来,它仍然太大。第一次出现时尺寸合适。 –
如果用户未输入该单元格的任何数据,则占位符用于第1节中的单元格显示“名称”。其他单元不需要占位符,所以这就是为什么它在一个if语句中。 –
修复了调整大小的问题。我需要使用[[cell contentView]边界],而不是[单元格边界]。有了这个修复,它工作得很好。 –