我搜索了论坛,但没有找到适合我情况的任何内容。我还是新手,所以这可能很简单,但我似乎无法弄清楚。
我有一个 UITableViewController 有几个部分。我创建了一个名为 SSSDataEntryCell 的自定义类,它允许用户输入文本。但是,在其中一个单元格中,我想用 UISegmentedControl 替换它。该代码在第一次显示表格时工作(控件出现,我可以选择一个段并且值更改),但是在任何类型的重新加载事件(旋转,滚动单元格不可见等)上,分段控制不再出现。
我每次都需要重新创建分段控件吗?这似乎效率低下,特别是因为它是一个 ivar。我曾尝试在添加之前发布单元格的子视图以及有关 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 ;
}