2010-09-30 32 views
5

Im nói về menu hiển thị khi bạn chọn một khối văn bản mà nó cung cấp cho bạn tùy chọn để cắt/dán/sao chép. Tôi đã tìm ra cách thêm một tùy chọn nữa vào menu, nhưng nếu tôi thêm hai hoặc nhiều tùy chọn, nó sẽ nói "nhiều" hơn trước. nhấp vào nó sẽ hiển thị tất cả các tùy chọn tôi đã thêm vào. Nhưng có cách nào để hiển thị tất cả các tùy chọn tôi đã thêm trả trước không? không có mục menu "thêm"?Trình đơn ngữ cảnh của iPhone/iPad

Trả lời

7

Bạn cần sử dụng UIMenuController. Nếu bạn không muốn Copy/Paste/Cut, bạn sẽ bao gồm một cái gì đó như thế này trong canPerformAction: phương pháp của bạn:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    if(action == @selector(someSelector:)) 
     return YES; 
    else 
     return NO; 
} 

Tạo một mục trình đơn mới trông như thế này:

UIMenuItem *someAction = [[UIMenuItem alloc]initWithTitle:@"Something" action:@selector(doSomething:)]; 

UIMenuController *menu = [UIMenuController sharedMenuController]; 
menu.menuItems = [NSArray arrayWithObject:someAction]; 
[menu update]; 
+1

Không phải là tôi không muốn những thứ đó. Tôi cần thêm hai mục menu nữa. – Melina

+0

Sau đó, bạn vẫn sử dụng một cái gì đó như tôi đăng nhưng thay vì sau đó làm @selector (sao chép :), thay đổi nó thành một cái gì đó như @selector (copyText :), sau đó thực hiện của riêng bạn - (void) copyText phương pháp sao chép. Sau đó, các mục khác của bạn sẽ không bị đẩy vào menu khác. – christo16

+0

Tôi có thể thay đổi văn bản của mục menu không? – Melina

1

tôi giả sử bạn nói về UIMenuController. Nếu bạn không muốn xem Copy/Paste/Cut/Xóa/Select/SelectAll bạn sẽ cần phải thêm mã sau vào UITextField 's hoặc UITextView' s đại biểu:

- (BOOL)canPerformAction: (SEL)action withSender: (id)sender { 
    BOOL answer = NO; 
    if (action == @selector(item1)) { 
     answer = YES; 
    } 
    if (action == @selector(item2)) { 
     answer = YES; 
    } 
    return answer; 
} 

đâu item1item2 là tên của các đối tượng trong UIMenuController.menuItems.

Theo kinh nghiệm của tôi nếu bạn đang sử dụng UITextView các mục menu Sao chép, Dán, Cắt và Chọn Tất cả sẽ vẫn còn, trong trường hợp này, hãy thêm mã sau vào một lớp con của UITextView.

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender { 
    if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:) || action == @selector(selectAll:)) { 
      return YES; 
    } 
} 
+0

Tôi không muốn tắt các tùy chọn này, tôi cần thêm hai tùy chọn tùy chỉnh khác. – Melina

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