2012-02-09 19 views
5

thể trùng lặp:
How to do edit-in-place in a UITableView?Editing TextLabel trong một UITableViewCell

Tôi mới vào iphone phát triển này. Tôi chỉ muốn biết cách chỉnh sửa/cập nhật UITextLabel trong một tableView.

Tôi đã sử dụng hoạt ảnh chỉnh sửa/thực hiện và có thể xóa các hàng nhưng tôi không thể biết cách chỉnh sửa văn bản trong các hàng đó.

Tôi muốn người dùng chỉnh sửa nhãn văn bản của ô.khi chỉnh sửa nút được nhấn.

tôi đã tìm kiếm trang web nhưng không thể nhận được câu trả lời chính xác.

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"]; 
if(!cell) 
{ 
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"]autorelease]; 
    cell.editingAccessoryType=YES; 
} 


myTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 6, 241, 31)]; 
myTextField.backgroundColor = [UIColor clearColor]; 
myTextField.textAlignment = UITextAlignmentLeft; 
myTextField.returnKeyType = UIReturnKeyDone; 
myTextField.delegate = self; 
cell.accessoryView = myTextField; 
myTextField.text = [self.arrayOfItems objectAtIndex:indexPath.row]; 
myTextField.enabled = NO; 
return cell; 
} 

-(IBAction)Edit:(id)sender 
{ 
if(self.editing) 
{ 
      [myTextField.Enabled = YES]; 
    [super setEditing:NO animated:NO]; 
    [self.tab setEditing:NO animated:NO]; 
    [self.tab reloadData]; 
    [self.navigationItem.rightBarButtonItem setTitle:@"Done"]; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain]; 
} 
else 
{ 
    myTextField.enabled= YES; 

    [super setEditing:YES animated:YES]; 
    [self.tab setEditing:YES animated:YES]; 
    [self.tab reloadData]; 
    [self.navigationItem.rightBarButtonItem setTitle:@"Edit"]; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 
} 
} 

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (self.editing == NO || !indexPath) 
return UITableViewCellEditingStyleNone; 
if (self.editing && indexPath.row == ([self.arrayOfItems count])) 
{ 
    return UITableViewCellEditingStyleInsert; 
} 
else 
{ 
    return UITableViewCellEditingStyleDelete; 
} 
return UITableViewCellEditingStyleNone; 
} 

Đây không phải đang làm việc cho me.textfield đang biến mất nếu tôi nhấn nút chỉnh sửa

Trả lời

1

Chỉnh sửa văn bản trong các hàng trong bảng rất khó vì bạn cần quản lý bàn phím và cuộn trường có thể chỉnh sửa lên để nhường chỗ cho bàn phím, v.v ... (có thể được cuộn ra khỏi màn hình khi đang chỉnh sửa v.v.). Ngoài ra, nếu bạn thực hiện mọi ô có thể chỉnh sửa, bạn phải quản lý giá trị được chỉnh sửa có thể được cuộn ra khỏi màn hình giữa chỉnh sửa, v.v. (nghĩa là khi bàn phím đang hoạt động, v.v.).

Không thể chỉnh sửa UILabel, bạn cần UITextField để chỉnh sửa văn bản.

Cách tốt nhất để chỉnh sửa giá trị trong ô bảng có thể là đẩy bộ điều khiển chế độ xem mới vào ngăn xếp trên hành động chỉnh sửa và có trường văn bản có thể chỉnh sửa và thêm/hủy mục nút thanh menu của bộ điều khiển xem đó.

Khi người dùng nhấn lưu, hãy cập nhật mô hình đằng sau chế độ xem bảng với giá trị văn bản thích hợp và bật trình điều khiển chế độ xem khỏi ngăn xếp lần nữa. Có chế độ xem chính chứa bảng gọi reloadData trên bảngView trong phương thức viewWillAppear của nó.

Điều này sẽ giúp bạn điều khiển dễ dàng nhất/tốt nhất hành vi bàn phím và hành vi chỉnh sửa khi các trường đang được chỉnh sửa.

+3

Trong khi điều này không thực sự trả lời câu hỏi về cách thực hiện chỉnh sửa văn bản trong bảng, nó trình bày một số điểm hợp lệ vì sao nó có thể không phải là ý tưởng hay trong mọi trường hợp. –

0

Nếu bạn đang sử dụng UITableViewCell tiêu chuẩn, bạn có thể làm như sau:

//Get the first cell of the first section 
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0]; 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:ip]; 

//Change the textLabel contents 
[[cell textLabel] [email protected]"Updated text"]; 

//Refresh the tableView 
[tableView reloadData]; 
+0

tôi muốn chỉnh sửa textLabel động khi nhấn nút chỉnh sửa. –

+0

Điều này cho phép bạn làm điều đó. M don'tO không chạy "tableView reloadData" vì điều đó sẽ ghi đè hoạt ảnh của ô khi bạn chuyển sang chế độ chỉnh sửa. –

-2
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
......... 

cell.textLabel.text = @"my text"; 

return cell; 
} 
+0

Đó không phải là điều anh ta muốn. –

+0

tôi muốn chỉnh sửa/cập nhật textLabel. –

+0

Vì vậy, bạn muốn thay đổi 'textLabel' của' UITableCell' trong mã của bạn hoặc bạn muốn người dùng có thể chỉnh sửa văn bản ô? –

1

Sử dụng UITextField thay cho UILabel trong ô Tuỳ chỉnh của bạn, sau đó Bạn có thể chỉnh sửa.cho ô tùy chỉnh Bạn có thể kiểm tra này Tutorial hoặc Bạn có thể Kiểm tranày.

+0

tôi không chắc chắn về cách làm điều đó. –

+0

Tôi đã chỉnh sửa câu trả lời của mình và cung cấp cho bạn liên kết về cách tùy chỉnh TableViewCell –

+0

Nếu bạn nhận được giải pháp từ câu trả lời của tôi thì hãy chấp nhận nó. –

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