有一個應用程序,我在其中動態生成多個UITextFields
。只要沒有選擇UITextFields
(在UITextField
之外觸摸),我想要退出第一響應者。我如何知道哪一個UITextField
我不得不辭職急救員?請指定「標籤」概念以外的任何其他方式,因爲我已經嘗試過。請提出正確的方向。提前致謝。退出多個UITextField的第一個響應者
回答
您可以將textFields
設置爲屬性並進行合成。您將需要與您在應用程序中使用的屬性一樣多。
對於三個textField,您可以有@synthesise myTextField0, myTextField1, myTextField2;
。只需將您正在使用的每個UITextField
分配給這些屬性,同時聲明它們。
而當你想辭職時,只需使用[self.myTextField0 resignFirstResponder]
在textFieldDidEndEditing
或你想要辭職的功能。你也可以使用它來處理其他的textField。這是處理多個文本框
一般的方式,你可以跳過這些步驟,textField.returnKeyType = UIReturnKeyDone;
如果你有一個DONE
返回鍵,你可以去到方法
- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return 1;
}
,或者您可以使用tags
來標記某些文本字段,然後退出特定的字段。
感謝響應,但此事發生的動態UITextField無法知道有多少人會在那裏?所以也不能合成,所以事情... 雖然做了不同的方式!謝謝!! –
使用此代碼並執行
-(BOOL)textFieldShouldReturn:(UITextField*)textField;
{
NSInteger nextTag = textField.tag + 1;
// Try to find next responder
UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
if (nextResponder) {
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
} else {
// Not found, so remove keyboard.
[textField resignFirstResponder];
}
return NO; // We do not want UITextField to insert line-breaks.
}
感謝@Deepesh快速回復! –
您可以實現的委託方法
- (void)textFieldDidBeginEditing:(UITextField *)textField;
在
你可以採取currentTextField =文本框;
在另一個委託方法- (BOOL)textFieldShouldReturn:(UITextField *)textField;
你可以做currentTextField =零;
那麼你可以辭職currentTextField ....
你可以檢查與isFirstResponder
。 在任何時間點只有一個UIResponder
(UITextField
在你的情況)可以是。
感謝您的建議!我用其他方式完成了它,但想知道你的完整過程..你能發佈一段代碼嗎?提前致謝!! –
順便說一下..我用不同的方式做了這個..不是看起來不錯的編程冠軍技術,但足以解決我的工作!
for(UIView *v in self.view.subviews)
{
if(([v isMemberOfClass:[UITextField class]]==YES) && !(CGRectContainsPoint(v.frame,[[touches anyObject] locationInView:self.View)))
{
v.userInteractionEnabled=NO;
if([v isEditing])
{
[v resignFirstResponder];
}
}
}
,您可以嘗試這樣的:
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
for (id textField in self.view.subviews) {
if ([textField isKindOfClass:[UITextField class]] && [textField isFirstResponder]) {
[textField resignFirstResponder];
}
}
}
我沒有嘗試,但它似乎是一個不錯的解決方案
不要叫resignFirstResponder
;致電endEditing:
!
在視圖層次結構中的文本字段之上的任何視圖上調用endEditing:
。它會找到第一個響應者並要求它辭職。使用endEditing:YES
強制它或endEditing:NO
讓文本字段的委託人決定是否應該結束編輯(如果您正在驗證輸入,則有用)。
**[self.view endEditing:TRUE];** //Resign firstresponder for all textboxes on the view
使用[self.view endEditing:YES];
以resignFirstResponder當前活動的UITextField。
最通用的方法,也只有在UITableViewController
工作對我來說是一個被向下發送響應鏈的行動,並等待合適的對象接收動作:
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
測試在iOS8中
這在Xamarin.iOS/Monotouch中適用於我。 將鍵盤按鈕更改爲下一步,將控件傳遞到下一個UITextField並在最後一個UITextField後隱藏鍵盤。
private void SetShouldReturnDelegates(IEnumerable<UIView> subViewsToScout)
{
foreach (var item in subViewsToScout.Where(item => item.GetType() == typeof (UITextField)))
{
(item as UITextField).ReturnKeyType = UIReturnKeyType.Next;
(item as UITextField).ShouldReturn += (textField) =>
{
nint nextTag = textField.Tag + 1;
var nextResponder = textField.Superview.ViewWithTag(nextTag);
if (null != nextResponder)
nextResponder.BecomeFirstResponder();
else
textField.Superview.EndEditing(true);
//You could also use textField.ResignFirstResponder(); but the above line makes some users happier (e.g. benzado)
return false; // We do not want UITextField to insert line-breaks.
};
}
}
裏面的viewDidLoad中你必須:
如果您的TextField沒有標籤集現在:
txtField1.Tag = 0;
txtField2.Tag = 1;
txtField3.Tag = 2;
//...
,只是通話
SetShouldReturnDelegates(yourViewWithTxtFields.Subviews.ToList());
//If you are not sure of which view contains your fields you can also call it in a safer way:
SetShouldReturnDelegates(txtField1.Superview.Subviews.ToList());
//You can also reuse the same method with different containerViews in case your UITextField are under different views.
我在有問題辭職第一響應者用於從多個TextField中選擇的UITextField。 我發現這是工作爲我後,許多不同的解決方案。
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
for (id textField in self.view.subviews) {
if ([textField isKindOfClass:[UITextField class]] && [textField isFirstResponder] && [textField isEqual:_selectedLabel]) {
[textField resignFirstResponder];
}
}
}
的[簡單的方法來關閉鍵盤?]
- 1. UITextField不會退出第一響應者?
- 2. 使UITextField從另一個類別中退出第一響應者
- 3. 保持UITextField不會退出第一個響應者的狀態
- 4. UITextField在UIButton touch上退出第一響應者
- 5. 找出UITextfield的結束編輯而不退出第一響應者
- 6. UITextField本身成爲第一響應者...?
- 7. modalViewController問題與UITextField第一響應者
- 8. 的UITextField中的UITableView不成爲第一個響應者
- 9. UITableViewCell中的UITextField在插入後成爲第一個響應者
- 10. 爲UITextField不能成爲第一個響應者UICollectionView的reloadData後
- 11. 從另一個視圖控制器中退出第一個響應者
- 12. 如何檢測當UITextField是第一個響應者
- 13. 無法在存儲指針並退出第一個響應者後重新對焦UITextField
- 14. 當使用UINavigationController時,退出didSelectRowAtIndexPath中的第一響應者
- 15. iPad不退出響應者
- 16. 如何檢查控件是否退出第一響應者或成爲第一響應者?
- 17. IOS關閉/顯示鍵盤沒有退出第一個響應者
- 18. TextField不會使用UIModalPresentationFormSheet視圖退出第一響應者
- 19. 停止UISearchDisplay控制器從退出第一響應者鍵盤
- 20. UITableView - 在外部觸摸上退出第一響應者
- 21. 使用接口生成器退出第一響應者
- 22. NSTextField在退出第一響應者後繪製白色區域
- 23. NSTextField事件並退出第一響應者
- 24. 哪個NSTextView是第一響應者?
- 25. 可可 - NSThread和第一個響應者
- 26. 第一響應者
- 27. uitextfield響應者的問題
- 28. 與第一響應者識別的UITextField在我目前的UIView
- 29. UITableViewCell內的UITextField不會成爲第一響應者
- 30. UITextField不會成爲收集視圖中的第一響應者
可能重複(http://stackoverflow.com/questions/741185/easy-way-to-dismiss-keyboard) – Loukas