我有一個UITextField
在原型單元格內有一個標籤。當UITableView
正在構建並且上面的單元格中的UISwitch
已打開時,UITextField
將設置爲第一響應者。 這適用於應用程序從頭開始或關閉並重新啓動。一旦它被加載,[tableView reloadData]
不會再觸發becomeFirstResponder
。UITableView單元格中的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
的單元格尚未繪製。一旦我切換到ON
,UITextField
就會在第二個單元中繪製併成爲第一個響應者。如果我再次切換OFF
和ON
,我仍然會獲得我的日誌「完成重新加載」,但UITextField
不會成爲第一響應者。這是推動我堅果.... 必須是關於應用程序的生命週期的東西。
請出示,你叫'becomeFirstResponder' – KDaker
代碼你有方法當你切換你的開關時被調用?如果是,發佈該代碼。如果不是,那麼您需要設置該值,以便在打開開關時調用becomeFirstResponder。 – lnafziger
我已經使用了與按鈕示例中的switchvalue changed事件相同的代碼。 – Mike73