2008-11-24 34 views
7

Tôi có hai UIActionSheets và tôi nghĩ rằng tôi sẽ kiểm soát chúng với một đại biểu (UIViewController khởi tạo chúng). Các đại biểu sẽ nắm bắt một cuộc gọi actionSheet và cố gắng tìm ra cái nào của hai đã ném sự kiện.Sử dụng một đại biểu để quản lý hai UIActionSheets

Tôi đã cố gắng lấy tiêu đề của modalView để phân biệt, nhưng có vẻ như không hợp lệ ...

Công việc này có nên không?

Nếu không, có cách nào khác để phân biệt UIActionSheet nào đã thực hiện sự kiện không?

Hoặc tôi có cần phải tạo hai lớp khác nhau sẽ là đại biểu riêng biệt cho mỗi UIActionSheet không?

Xin cảm ơn trước.

Trả lời

44

Tôi nghĩ bạn cần thuộc tính thẻ của UIActionSheet.

Cái gì như:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle ... ]; 
actionSheet.tag = 10; 
[actionSheet showInView:self.view]; 

Sau đó, trong đại biểu của bạn:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    switch (actionSheet.tag) { 
    case 10: 
     ... 
    } 
} 

thẻ là một tài sản của UIView và có thể được thiết lập trong giao diện Builder cho các thành phần mà xuất hiện ở đó quá. Khá tiện dụng, mặc dù tôi chưa bao giờ thực sự sử dụng nó trong bối cảnh này.

+1

Stephen đánh tôi vào cú đấm. Đây chính xác là kỹ thuật tôi sử dụng. Thuộc tính thẻ khá tiện dụng đối với các trường hợp như thế này. Tôi cũng sử dụng nó khi tôi tự động tạo giao diện người dùng nơi số lượng các bản xem phụ được xác định khi chạy. – Jablair

+0

Tuyệt vời, điều này làm việc tuyệt vời. Cảm ơn! –

+0

"tag" là một mẹo tuyệt vời - tuyệt vời. – Fattie

9

Phương thức ủy quyền trong Cocoa bao gồm đối tượng gửi cho mục đích này. Giữ một tham chiếu đến mỗi trang hành động của bạn như là một biến cá thể trong lớp điều khiển của bạn, và bạn có thể so sánh điều này với tham số actionSheet trong các phương thức ủy nhiệm của bạn để quyết định hành động nào bạn cần thực hiện.

Sử dụng thuộc tính thẻ của chế độ xem sẽ hoạt động nhưng sẽ dễ dàng hơn để giữ tham chiếu. Thuộc tính thẻ có nghĩa là giúp bạn tìm một chế độ xem nếu bạn đang xem qua một hệ thống phân cấp các lượt xem phụ và không có tham chiếu đến đối tượng bạn cần.

6

Bạn nên sử dụng con trỏ ActionSheet được chuyển đến phương thức của đại biểu như Marc đã nói. Ví dụ:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if(actionSheet == myDoSomethingActionSheet) { 
     if(buttonIndex == 0) { 
      [self doThingA]; 
      return; 
     } 
     if(buttonIndex == 1) { 
      [self doThingB]; 
      return; 
     } 
    } 
    if(actionSheet == myOtherActionSheet) { 
     if(buttonIndex == 3) { 
      [self doImportantThing]; 
      return; 
     } 
    } 
} 
Các vấn đề liên quan