2011-07-07 28 views
5

Đây là những gì tôi đang cố gắng để đạt được:Tôi muốn có một UITextField đó là trong UITableViewCell để trở thành responder đầu tiên chỉ khi tế bào chạm

Tôi muốn có một UITextField đó là trong UITableViewCell để trở thành responder đầu tiên chỉ khi tế bào xúc động. Tôi muốn trường văn bản trở thành người trả lời đầu tiên chỉ khi tôi đặt câu trả lời đầu tiên theo phương thức:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath` 

Bất kỳ ý tưởng nào về cách tôi có thể đạt được điều này? Khi trường văn bản được chạm trực tiếp, tableView:didSelectRowAtIndexPath: không bao giờ được gọi.

Xin cảm ơn trước.

Trả lời

2

Tôi đoán, bạn có UITableViewCell tùy chỉnh. Trong đó u có thể có một thành viên UITextField. Đúng?

Trong lớp tế bào tùy chỉnh, ghi đè phương pháp,

- (void)setSelected:(BOOL)selected animated:(BOOL)animated:

Trong đó, nếu được lựa chọn == YES, sau đó làm cho các lĩnh vực văn bản như trả lời đầu tiên. Khác, từ chức trả lời đầu tiên.

1

Để một đối tượng là đại biểu của UITextField và triển khai textFieldShouldBeginEditing:; return NO nếu ô chưa được chọn. (Bạn có thể có thể luôn luôn trả NO từ phương pháp này, nếu gọi becomeFirstResponder trực tiếp bỏ qua việc kiểm tra.)

1

Đối với có TextField trở thành first responder khi một uitableviewcell được chọn, sử dụng TextField của bạn như property của bạn, và gọi [self.textField1 becomeFirstResponder];

Lưu ý: Bạn sẽ cần nhiều thuộc tính như số lượng UITableViewCells vì mỗi ô có một textField.

Khi chạm vào trường textField, trình biên dịch sẽ không biết rằng hàng tương ứng đã được chọn. Đối với điều này, bạn sẽ cần phải sử dụng tags, chẳng hạn như textField.tag == 0 cho textField đầu tiên, textField.tag ==1 cho TextField thứ hai và cứ tiếp tục như vậy. Và trong textFieldDidBeginEditing bạn nên kiểm tra thẻ, sau đó liên kết giá trị đó với hàng tương ứng được chọn.

Có ý nghĩa nào trong số này không? :)

1

Trước tiên, bạn cần một ô bảng tùy chỉnh, lớp con của riêng bạn là UITableViewCell. Trong quá trình triển khai đó, bạn cần triển khai hitTest: để xác định vị trí chạm xảy ra. Trong phương pháp đó, bạn có thể xác định nếu chạm vào trong thực tế bên trong rect của UITextField của bạn, và nếu nó được, làm cho nó là người trả lời đầu tiên. Dưới đây là một ví dụ từ một số mã tôi đã viết cho một dự án:

 
- (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]; 
} 

Thuộc tính nickname, trong trường hợp này, là một UITextField bên trong tùy chỉnh UITableViewCell.

Điều kiện xung quanh việc tự chỉnh sửa có thể có hoặc không liên quan đến đơn đăng ký của bạn. Ý tưởng ở đây cho bạn thấy cách hitTest: có thể được sử dụng, nói chung.

Các vấn đề liên quan