![](/img/trans.png)
[英]Telling a UITextField to become first responder while embedded in a UITableViewCell
[英]I want a UItextField that is in UITableViewCell to become first responder only when the cell touched
這就是我想要實現的目標:
我希望UITableViewCell
中的UITextField
僅在單元格觸摸時成為第一響應者。 我希望文本字段只有在方法中將其設置為第一響應者時才成為第一響應者:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
知道如何實現這一目標嗎? 當直接觸摸文本字段時,永遠不會調用tableView:didSelectRowAtIndexPath:
提前致謝。
我猜,你有一個自定義的 UITableViewCell。 你可以有一個 UITextField 成員。 正確的?
在自定義單元格 class 中,覆蓋該方法,
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
:
在那里,如果選擇 == YES,則將文本字段設為第一響應者。 否則,請辭去第一響應者的職務。
讓 object 成為 UITextField 的代表並實現textFieldShouldBeginEditing:
; 如果尚未選擇單元格,則返回NO
。 (如果調用becomeFirstResponder
直接繞過檢查,您可能始終可以從此方法返回 NO。)
為了在選擇uitableviewcell
時讓 textField 成為first responder
,請使用您的 textField 作為您的property
,然后調用[self.textField1 becomeFirstResponder];
注意:您將需要與 UITableViewCells 數量一樣多的屬性,因為每個單元格都有一個 textField。
當一個 textField 被觸摸時,編譯器將不知道相應的行被選中。 為此,您將需要使用tags
,例如textField.tag == 0
用於第一個 textField, textField.tag ==1
用於第二個 TextField 等等。 在textFieldDidBeginEditing
中,您應該檢查標簽,然后將該值與選定的相應行鏈接。
這些有意義嗎? :)
首先,您需要一個自定義表格單元格,即您自己的UITableViewCell
子類。 在該實現中,您需要實現hitTest:
以確定觸摸發生的位置。 在該方法中,您可以確定觸摸實際上是否在 UITextField 的矩形內,如果是,則使其成為第一響應者。 這是我為項目編寫的一些代碼的示例:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if (self.editing) { if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil]) return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event]; return [super hitTest:point withEvent:event]; } return [self contentView]; }
在這種情況下,屬性nickname
是自定義 UITableViewCell 中的 UITextField。
self.editing 周圍的情況可能與您的應用程序相關,也可能不相關。 這里的想法是向您展示通常如何使用 hitTest:。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.