2010-07-16 22 views
17

Tôi đang cố thêm mục menu bên cạnh mục "sao chép", "dán" vào UITextView. Tôi đã tạo một lớp con của UITextView và sao chép ví dụ từ tài liệu của táo ở đây:Làm cách nào để thêm UIMenuItem tùy chỉnh vào UIMenuController trong UITextView?

http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/Text/Text.html#//apple_ref/doc/uid/TP40009370-CH8-SW28

Tôi chỉ đơn giản là tạo ra một UiTextView trong IB và thiết lập các lớp học đến lớp CustomTextView tôi. Thật không may điều này đã không làm việc. Mặc dù, nếu tôi đặt CustomTextView của tôi thành một lớp con của UIView, nó hoạt động rất tốt. Bất kỳ trợ giúp ở đây?

Tôi cũng đã thực hiện một dự án ví dụ rất đơn giản về tình hình của tôi ở đây:

apps.popsweet.com/TextViewTrial.zip

Trả lời

35

Vì vậy, tôi đã kết thúc bằng cách sử dụng sau đây với kết quả mà tôi muốn, tôi đặt các khối sau trong phương pháp viewDidLoad của bộ điều khiển quan điểm của tôi như Alex ám chỉ đến:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Change Color" action:@selector(changeColor:)]; 
    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:menuItem]]; 
    [menuItem release]; 
} 

Sau đó, tôi thêm vào phần sau đây để xem bộ điều khiển để hiển thị các mục có điều kiện khi văn bản được chọn trong UITextView mà tôi đặt tên là "TextView":

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    if (action == @selector(changeColor:)) { 
     if (textView.selectedRange.length > 0) { 
      return YES; 
     } 
    } 
    return NO; 
} 

tôi đã chọn để đặt canPerformAction: withSender: phương pháp trong điều khiển xem thay vì một lớp tùy chỉnh UITextView vì cách này o tùy chọn có (ví dụ: sao chép, cắt, dán, vv) hoạt động như bình thường vì phương pháp này được gọi trên mọi đối tượng trong chuỗi trả lời.

+0

+1 tuy nhiên khi tôi thực hiện điều này, phương thức changeColor trỏ đến lớp TableViewCell tùy chỉnh của tôi và treo do không tồn tại. Tôi có thể trỏ điều này đến bộ điều khiển xem không? –

+1

Bạn có thể cần đảm bảo UIWindow là cửa sổ chính và để triển khai phương thức này: - (BOOL) canBecomeFirstResponder { trả về CÓ; } –

1

tôi đã chỉ có thể tạo ra một menu tùy chỉnh mà là luôn luôn có mặt trong menu bật lên, bằng cách thực hiện như sau:

- (void) setUpCustomMenu { 
Class cls1 = NSClassFromString(@"UIMenuController"); 
Class cls2 = NSClassFromString(@"UIMenuItem"); 
if (cls1 && cls2) 
    if ([UIMenuController instancesRespondToSelector:@selector(setMenuItems:)]) { 
      UIMenuItem* item1 = [[UIMenuItem alloc] initWithTitle:@"My Menu Item" action:@selector(myMenuAction:)]; 
      [UIMenuController sharedMenuController].menuItems = [NSArray arrayWithObjects:item1, nil];; 
      [item1 release]; 
    } 
} 

Điều này được gọi trong chế độ xemĐiều khiển của bộ điều khiển chế độ xem.

Tôi vẫn đang vật lộn để làm điều này chỉ hiển thị mục menu của tôi có điều kiện (nếu, ví dụ, có một cái gì đó được chọn), bằng cách chặn sự kiện triệu tập trình điều khiển menu. Cho đến nay tôi đã không thể làm điều này.

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