2013-05-23 22 views

Trả lời

29

Tạo một tài sản cho mỗi ô bạn muốn thay đổi trong điều khiển xem bảng của bạn, như vậy:

@property (weak) IBOutlet UITableViewCell *cell1; 
@property (weak) IBOutlet UITableViewCell *cell2; 

Connect mỗi một đến một ô trong Interface Builder.

Khi bạn chỉ cần thay đổi nội dung của nhãn, bạn có thể sử dụng

self.cell1.textLabel.text = @"New Text"; 

Nếu bạn cần phải thay thế toàn bộ nhãn, sử dụng

UILabel *newLabel = [[UILabel alloc] init]; 
self.cell2.textLabel = newLabel; 
+1

Tuyệt vời !!! Cảm ơn. Tôi không biết rằng textLabel có thuộc tính văn bản. – vZ10

+2

Không, bạn không được giữ lại tất cả các ô của bạn, bởi vì bạn phải tái sử dụng các tế bào của bạn, và không tải tất cả các tế bào vào bộ nhớ, bạn phải có chỉ các tế bào mà bạn đang hiển thị nạp! – ggrana

+1

@ggrana Vì đây là những tế bào tĩnh mà chúng ta đang xử lý, không có khả năng là nhiều trong số chúng, do đó việc sử dụng bộ nhớ sẽ không đáng kể. Tuy nhiên, tôi đồng ý rằng câu trả lời đã chỉnh sửa của bạn tốt hơn câu trả lời của tôi, vì vậy tôi đã upvoted nó. –

2

Bạn có thể lấy tế bào từ xem bảng của bạn bằng cách sử dụng phương thức cellForRowAtIndexPath, bạn sẽ cần xác định một lối thoát để truy xuất tableview của bạn.

__weak IBOutlet UITableView *tableView; 

sau đó bạn có thể lấy tế bào như thế:

NSIndexPath* indexPath = [NSIndexPath indexPathForRow:yourRow inSection:yourSection]; 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
[[cell textLabel] setText:@"Your new text"]; 

Có lẽ sau khi cài đặt văn bản, bạn sẽ cần phải điều chỉnh nhãn của bạn, hoặc chiều cao di động của bạn, nếu bạn muốn có một sự giúp đỡ sâu cung cấp thêm thông tin và tôi sẽ vui lòng giúp bạn.

Và bạn đã hoàn tất, hy vọng điều đó sẽ hữu ích.

+2

Bạn không cần khai báo một Outlet cho bảngView vì bạn đã sử dụng một UITableViewController. –

+4

một UITableView được cấu hình với 'Các ô tĩnh' chỉ có thể tồn tại trong ngữ cảnh của một UITableViewController. –

10

@RossPenman đã đăng câu trả lời hay.

@ggrana lưu ý một vấn đề tiềm năng để làm với bộ nhớ và tái sử dụng di động, tuy nhiên đừng lo lắng về điều đó ...

Đối với một UITableView với các tế bào tĩnh tất cả các tế bào được khởi tạo lên phía trước, trước khi viewDidLoad được gọi trên UITableViewController và không được sử dụng lại theo cách mà các tế bào động. Vì vậy, bạn thậm chí có thể chỉ cần lấy IBOutlets trực tiếp tới UITextFields, UISwitches, UILabels và những thứ bạn thực sự quan tâm đến việc bạn đã bỏ vào các ô tĩnh của bạn trong Bảng phân cảnh.

+0

Tôi không biết bạn có thể tạo 'IBOutlets' từ các ô tĩnh. Phải tìm hiểu thêm về tài liệu, tôi đoán vậy. –

4

Tôi cần điều này.

dispatch_async(dispatch_get_main_queue(), ^{ 
    (...textLabel updates) 
    [self.tableView reloadData]; 
}); 
0

Bạn có thể làm một cái gì đó như thế này

for (int section = 0; section < [table numberOfSections]; section++) { 
    for (int row = 0; row < [table numberOfRowsInSection:section]; row++) { 
     NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section]; 
     UITableViewCell* cell = [self cellForRowAtIndexPath:cellPath]; 
     cell.backgroundColor = [UIColor blackColor]; 
     cell.textLabel.textColor = [UIColor whiteColor; 
     cell.textLabel.text = @"Your text"; 
    } 
} 

Ngoài ra, hãy chắc chắn để giữ những thay đổi của bạn ra khỏi viewDidAppear và đặt chúng trong viewWillAppear hoặc bạn sẽ chạy vào các vấn đề

0

Hy vọng nó hoạt động :

@IBOutlet weak var yourTextField: UITextField! 
private var yourText: String? 

Tôi chỉ tùy chỉnh trong ủy quyền của tableview này:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    guard let yourText = yourText else { return } 
    yourTextField.text = yourText 
} 

Khi bạn thay đổi văn bản:

yourText = "New text here" 
tableView.reloadData() 
1

Swift 3 giải pháp:

Đầu tiên tạo một IBOutlet của tĩnh TableViewCell

@IBOutlet weak var cellFirst: UITableViewCell! 

sau đó trong tên nhãn thay đổi viewDidLoad.

cellFirst.textLabel?.text = "Language" 

Lưu ý: Nếu bạn đã đính kèm một nhãn trên TableViewCell sau đó chỉ cần che giấu nó bằng cách sử kịch bản này.

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