2012-10-18 19 views
2

我有一個UITextField在原型單元格內有一個標籤。當UITableView正在構建並且上面的單元格中的UISwitch已打開時,UITextField將設置爲第一響應者。 這適用於應用程序從頭開始或關閉並重新啓動。一旦它被加載,[tableView reloadData]不會再觸發becomeFirstResponderUITableView單元格中的UITextField以編程方式成爲第一個應答程序

如果UITextField成爲被後來上觸摸文本字段第一響應者,我可以觸發事件becomeFirstResponder的按鈕,以彈出窗口,... 但不能與我交換了。

任何指針,我可以嘗試什麼?

目前,我使用didSelectRowAtIndexPath方法觸發彈出。一個很好的副作用是,當我拉起數字鍵盤時,我可以在彈出框中提供一個確定和取消按鈕,而不必使用鍵盤上的單獨按鈕。但它似乎很明顯是一個解決方法。

這是我如何調用firstresponder建設UITableView(其中每個應用程序從頭開始時間工作)時:

if ([settings doubleForKey:@"limitDouble"]==0 && [settings boolForKey:@"limitBool"]==YES) { 
    [dailyLimitEntry becomeFirstResponder]; 
} 

dailyLimitEntry是UITextField是強勁,因此它總是在那裏。

只是爲了好玩,我添加一個按鈕,並將其連接到我這樣的代碼:

UITextField *tmp = (UITextField *)[self.view viewWithTag:35]; 
[tmp becomeFirstResponder]; 

這工作了。當我在開關上使用它時,只有在應用程序剛載入內存時纔會調用它。否則,我的UITextField不響應交換機。

第一的意見後,我發現了一個方法來檢查UITableView是否已完成重裝

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if([indexPath row] == ((NSIndexPath*)[[settingsTableView indexPathsForVisibleRows] lastObject]).row){ 
     //end of loading 
     //for example [activityIndicator stopAnimating]; 
     NSLog(@"finished reload"); 
     NSLog(@"%@",dailyLimitEntry); 
     if ([settings boolForKey:@"limitBool"]==YES) { 
      UITextField *tmp = (UITextField *)[self.view viewWithTag:35]; 
      [tmp becomeFirstResponder]; 
     } 
    } 
} 

好玩的事情雖然是,成爲第一個響應者時,纔會觸發第一次開關後使用應用已加載。最初,開關關閉。因此,包含UITextField的單元格尚未繪製。一旦我切換到ONUITextField就會在第二個單元中繪製併成爲第一個響應者。如果我再次切換OFFON,我仍然會獲得我的日誌「完成重新加載」,但UITextField不會成爲第一響應者。這是推動我堅果.... 必須是關於應用程序的生命週期的東西。

+0

請出示,你叫'becomeFirstResponder' – KDaker

+0

代碼你有方法當你切換你的開關時被調用?如果是,發佈該代碼。如果不是,那麼您需要設置該值,以便在打開開關時調用becomeFirstResponder。 – lnafziger

+0

我已經使用了與按鈕示例中的switchvalue changed事件相同的代碼。 – Mike73

回答

1

不是檢查indexPath,而是檢查單元的類。

這是我做的,彈出鍵盤那是空白標題單元格(當我創建一個新項目):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([cell isKindOfClass:[FDSSampleTitleCell class]]) { 
     FDSSampleTitleCell *titleCell = (FDSSampleTitleCell *)cell; 
     if (titleCell.titleField.text.length == 0) { 
      [titleCell.titleField becomeFirstResponder]; 
     } 
    } 
} 
相關問題