我有一個具有4個不同原型單元格的靜態UITableView。我用3個不同的「switchcell-prototypes」,switchCell1來切換Cell3(我很懶),而不是使用1個可重用的單元。第一個switchCell位於表格的第1部分,以及我製作的textBoxCell。其他2個switchCells位於第2部分。 我正在訪問帶有標記的單元格內的開關和文本框。UITableViewCell中帶有標記的UITextfield在表中有多個部分可見時返回null
只是爲了試一試我改變了我的代碼,以便tableview現在只有一個部分。現在一切都顯示出來了,沒有切換來隱藏某些單元格。看起來這不是2個部分的問題,但是在其中具有文本字段的單元之後有單元格。奇怪的。
開關和文本框的屬性很強。
這是我如何訪問我的交換機和文本框:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
switchCellLabel = (UILabel *)[cell viewWithTag:10];
dailyLimitSwitch = (UISwitch *)[cell viewWithTag:20];
[dailyLimitSwitch setOn:[settings boolForKey:@"limitBool"]];
textBoxCellLabel = (UILabel *)[cell viewWithTag:30];
dailyLimitEntry = (UITextField *)[cell viewWithTag:40];
這是一個開關的作用:
- (IBAction)dailyLimitSwitch:(id)sender {
if ([settings boolForKey:@"limitBool"]==NO) {
[settings setBool:YES forKey:@"limitBool"];
}else if ([settings boolForKey:@"limitBool"]==YES){
[settings setBool:NO forKey:@"limitBool"];
[settings setDouble:(0) forKey:@"limitDouble"];
我現在用的是同一種行動的文本框也是。 - (IBAction)dailyLimitEntry:(id)sender
所以,這裏是我的UITextField 完整IBAction爲我基本上是從的UITextField獲取字符串,使其成爲一個數字,以檢查用戶輸入的實數,然後創建一個整數,看它是否是一個十進制數,因爲我只需要整數,然後在一些NSUserDefaults中「保存」條目。就像最初發布的那樣,只要表格的只有一部分可見,就可以工作。只要我在第二部分中顯示開關,文本字段將返回空值。
- (IBAction)dailyLimitEntry:(id)sender {
NSNumberFormatter *newLimitFormatter = [[NSNumberFormatter alloc]init];
[newLimitFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[newLimitFormatter setMaximumFractionDigits:3];
NSNumber *newLimitNr = [[NSNumber alloc]init];
newLimitNr = [newLimitFormatter numberFromString:dailyLimitEntry.text];
double newLimitDouble = [[newLimitFormatter numberFromString:dailyLimitEntry.text]doubleValue];
int newLimitInt = [newLimitNr intValue];
if (newLimitNr == nil || (newLimitDouble - newLimitInt)>0) {
UIAlertView *invalidLimitAlert = [[UIAlertView alloc]initWithTitle:@"Limit" message:@"Invalid limit" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[invalidLimitAlert show];
}else{
[settings setDouble:newLimitDouble forKey:@"limitDouble"];
if (![settings doubleForKey:@"countDouble"]==0) {
double newRemainingDouble = [settings doubleForKey:@"limitDouble"]-[settings doubleForKey:@"countDouble"];
[settings setDouble:newRemainingDouble forKey:@"remainingDouble"];
}else if ([settings doubleForKey:@"countDouble"]==0){
double newRemainingDouble = [settings doubleForKey:@"limitDouble"];
[settings setDouble:newRemainingDouble forKey:@"remainingDouble"];
}
}
[dailyLimitEntry resignFirstResponder];
}
最後我的cellForRowAtIndexPath: (這是從這裏的一切仍然工作我已經在這裏引用它們像switchcell加入我的新的IB「switchcells」,並添加數字1。和2到標識符(switchcell1和switchcell2),使得它們是不同的
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
if (section == 0 && row == 0) {
cellIdentifier = @"switchCell";
}
if (section == 0 && row == 1) {
cellIdentifier = @"textBoxCell";
}
NSArray *labelsForCurrentSection = [sectionLabels objectAtIndex:section];
NSString *labelForCurrentCell = [[NSString alloc]init];
labelForCurrentCell = [labelsForCurrentSection objectAtIndex:row];
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
switchCellLabel = (UILabel *)[cell viewWithTag:10];
dailyLimitSwitch = (UISwitch *)[cell viewWithTag:20];
[dailyLimitSwitch setOn:[settings boolForKey:@"limitBool"]];
textBoxCellLabel = (UILabel *)[cell viewWithTag:30];
dailyLimitEntry = (UITextField *)[cell viewWithTag:40];
switchCellLabel.text = labelForCurrentCell;
textBoxCellLabel.text = labelForCurrentCell;
if ([settings doubleForKey:@"limitDouble"]==0) {
dailyLimitEntry.text = @"";
}else{
NSString *dailyLimitStr = [[NSString alloc]initWithFormat:@"%0.f",[settings doubleForKey:@"limitDouble"]];
dailyLimitEntry.text = dailyLimitStr;
}
return cell;
}
這裏的問題是: 所有開關和文本框通過IBAction鏈接到接口。 無論第二部分是否可見,我都可以使用全部3個開關設置我的userdefaults。但是,如果我的第二部分不可見,那麼textfield會返回值,如果可見,則返回null。
任何想法?這真的讓我發瘋。
發佈在你的' - (IBAction)dailyLimitEntry:(id)sender'中的代碼,因爲這是你遇到的問題。此外,你的*整個*'tableView:cellForRowAtIndexPath'可能會有所幫助。 – lnafziger