2011-10-17 31 views
5

Tôi đã sử dụng các thói quen gợi ý sau đây để thay đổi hình ảnh nút tiết lộ chi tiết trong một tế bào xem bảng (trong tableView cellForRowAtIndexPath)Thay đổi hình ảnh cho một nút tiết lộ chi tiết (Xcode 4.2)

if (cell == nil) { 

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 

    UIButton *myAccessoryButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)]; 
    [myAccessoryButton setBackgroundColor:[UIColor clearColor]]; 
    [myAccessoryButton setImage:[UIImage imageNamed:@"ball"] forState:UIControlStateNormal]; 
    [cell setAccessoryView:myAccessoryButton]; 
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
} 

Tuy nhiên, sự kiện tableView accessoryButtonTappedForRowWithIndexPath hiện không còn được gọi khi nhấp vào nút.

Có ai có ý tưởng nào về lý do không?

Trả lời

5

Tôi cũng gặp vấn đề tương tự trong dự án của mình.

Ai đó biết đúng cách để thực hiện việc này?

Tnx

Edit:

nhìn vào post này ... nó làm việc cho tôi.

+1

+1 nhưng đã lấy chi tiết trong câu trả lời riêng biệt bên dưới để tránh phải rời khỏi SO – Rhubarb

6

Tôi đã +1 câu trả lời của Fry, nhưng chỉ để kéo mã vào từ trang web khác để làm cho SO hoàn chỉnh hơn: Câu trả lời là bạn phải gọi accessoryButtonTapped .... sẽ không được thực hiện tự động như nó sẽ cho việc tiết lộ chi tiết được xây dựng trong, vì vậy bạn phải tự mình làm với mục tiêu của nút.

dịch từ mã liên kết với ví dụ của bạn ở trên, thêm dòng này sau khi setImage:

[myAccessoryButton addTarget:self action:@selector(accessoryButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside]; 

Sau đó thêm này sau này:

- (void)accessoryButtonTapped:(id)sender event:(id)event 
{ 
    NSSet *touches = [event allTouches]; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentTouchPosition = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition]; 
    if (indexPath != nil) { 
     [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath]; 
    } 
} 

(sao chép nguyên văn từ this link)

Lưu ý rằng điều này giả định rằng nút được tạo ra trong UITableViewController (trong trường hợp của tôi tôi đang tạo một trong một ô tùy chỉnh để tham chiếu hơi differe nt)

Giải thích: phụ kiệnButtonTapped là phương pháp nhắm mục tiêu tùy chỉnh cho nút tùy chỉnh của chúng tôi. Khi nhấn nút ("TouchUpInside") thì chúng ta sẽ tìm thấy indexPath của ô tại điểm mà trong đó báo chí đã xảy ra và gọi phương thức mà khung nhìn bảng sẽ thường gọi.

+0

Tuyệt vời ... việc triển khai tương tự ở đây: http://iosdevblog.com/2014/07/26/custom-image- nút tiết lộ chi tiết / – plusangel

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