2008-12-31 26 views

Trả lời

113

Bạn sẽ cần phải tạo chế độ xem tùy chỉnh và gán nó cho thuộc tính accessoryView của đối tượng UITableViewCell. Một cái gì đó như:

myCell.accessoryView = [[ UIImageView alloc ] 
         initWithImage:[UIImage imageNamed:@"Something" ]]; 
+7

Nếu tôi làm điều này, tôi nhận thấy rằng phương pháp UITableViewDelegate - [tableView: accessoryButtonTappedForRowWithIndexPath:] không còn được gọi. Đó là hành vi mong đợi? Có cách nào để giữ phương pháp này hoạt động không? –

+0

Có một số giải thích khác tại http://stackoverflow.com/questions/869421/using-a-custom-image-for-a-uitableviewcells-accessoryview-and-having-it-respond – jarnoan

+0

là có thể thực hiện điều đó bằng cách sử dụng UIApperance proxy trên UITableViewCell? – Claus

7

Tôi chạy vào cùng một vấn đề như Greg - quan điểm phụ kiện không theo dõi (nếu bạn sử dụng một UIImageView)

Tôi giải quyết nó như thế này:

UIImage * image = [ UIImage imageNamed:@"disclosure-button-grey.png" ] ; 
UIControl * c = [ [ UIControl alloc ] initWithFrame:(CGRect){ CGPointZero, image.size } ] ; 

c.layer.contents = (id)image.CGImage ; 
[ c addTarget:self action:@selector(accessoryTapped:) forControlEvents:UIControlEventTouchUpInside ] ; 
cell.accessoryView = c ; 
[ c release ] ; 
+1

Tại sao không chỉ sử dụng một UIButton đơn giản với hình ảnh, thay vì sử dụng nội dung lớp? –

+0

Tôi cảm thấy như tôi phải đã thử điều đó và nó không hoạt động vì một lý do nào đó? Nhưng chắc chắn, hãy thử với UIButton trước tiên ... – nielsbot

+0

Khi sử dụng hình ảnh tùy chỉnh, vị trí có thể thay đổi và người dùng có thể gặp sự cố khi nhấp vào vì khung hình của nó có thể nhỏ. tốt nhất là thêm nút xem phụ ở phía trên chế độ xem phụ kiện, theo cách này bạn có thể xử lý kích thước và vị trí. – david72

9
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"]; 
    cell.accessoryView =[[[UIImageView alloc] initWithImage:indicatorImage] autorelease]; 


    return cell; 
} 

tôi cũng làm điều này với mã trợ giúp được cung cấp ở trên

-2

LƯU Ý: KHÔNG đặt ô tùy chỉnh thành thẻ: 0. Thẻ đó được dành riêng cho chế độ xem nhãn văn bản. Nếu bạn đặt thẻ trong Bảng phân cảnh Xcode, , bạn phải đặt thẻ cho các chế độ xem/nhãn tùy chỉnh thành 1 hoặc cao hơn.

Note của Apple dụ:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath 
{ 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"]; 

    UILabel *label; 

    label = (UILabel *)[cell viewWithTag:1]; 
    label.text = [NSString stringWithFormat:@"%d", indexPath.row]; 

    label = (UILabel *)[cell viewWithTag:2]; 
    label.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row]; 

    return cell; 
} 
0

tôi muốn làm điều đó như sau:

UIImageView *chevronImgVw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron_accessory_vw_img.png"]]; 
chevronImgVw.frame = CGRectMake(cell.accessoryView.frame.origin.x, cell.accessoryView.frame.origin.y, 10, 20); 
cell.accessoryView = chevronImgVw; 

hãy, hãy thử điều này trước khi bạn xuống bỏ phiếu! Bởi vì tại thời điểm này nó có 2 upvotes và 2 downvotes!

-1

Tôi đã thử mã ở trên và dường như không hoạt động nữa, có thể do tuổi của bài đăng này nên tôi sẽ ném xuống dòng đã cho tôi chế độ xem phụ kiện tùy chỉnh.

[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]]; 

Hy vọng ai đó thấy điều này hữu ích.

+2

Tom, câu trả lời được chấp nhận trên mục này chính xác là giống nhau. Tôi đang thiếu gì ở đây? – jpm

0

Có một số nice example from Apple cho biết cách sử dụng UIControl để đáp ứng loại tùy chỉnh AccessoryView này.

Ghi đè - (void)drawRect:(CGRect)rect trong UIControl không phải là cách dễ nhất, nhưng mang đến cho bạn nhiều sự linh hoạt để tạo kiểu cho các chế độ xem phụ kiện đẹp mắt.

enter image description here

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