2012-10-05 46 views
0

我有一個具有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。

任何想法?這真的讓我發瘋。

+0

發佈在你的' - (IBAction)dailyLimitEntry:(id)sender'中的代碼,因爲這是你遇到的問題。此外,你的*整個*'tableView:cellForRowAtIndexPath'可能會有所幫助。 – lnafziger

回答

0

我解決了我的問題,它現在可以在我的UITextField-cell之後使用多個部分和單元格。

這裏就是我所做的:

  • 創建原型細胞通過IBAction爲 「didEndOnExit」,以持有的UITextField
  • 連接的UITextField。ħ
  • 當設置在cellForRowForIndexPath所述的UITextField-細胞,參照所述的UITextField這樣dailyLimitEntry = (UITextField *)[cell viewWithTag:35];(這種方式,可以將內容從userdefaults經由dailyLimitEntry.text
  • 在的UITextField - (IBAction)dailyLimitEntry:(id)sender我的didEndEditing的IBAction爲設定從發送者給我的任何東西訪問UITextField的內容,爲此,我設置了一個像這樣的臨時變量UITextField *cellDailyLimitEntryTextField= (UITextField*)sender;(長變量名只是爲了讓我能記得我以後回來時做的事情
  • 現在,我可以通過cellDailyLimitEntryTextField.text檢索文本字段的值,並繼續執行我的其餘代碼。

現在,UITextField的行爲就像它甚至沒有位於tableview的單元格中一樣,並且獲取和設置內容很簡單。

無論蘋果公司是否可以,只要我提交我的應用程序,我就會知道。但我基本上使自己想要的應用程序;-)

順便說一句,沒有UITextFieldDelegate及其方法需要。我認爲設置我的單元格創建了一個UITextField的實例,我沒有正確訪問以接收內容。就像在我的問題中所述,只要沒有更多的單元格跟隨UITextFieldCell,一切正常。現在我已經打開了我的UITableView到2個部分的初始狀態,它的工作原理。

如果你喜歡我對我的問題的回答,請投票支持。