Bagaimana cara menambahkan UIMenuItem khusus ke UIMenuController di UITextView?

Saya mencoba menambahkan item menu di sebelah item "salin", "tempel" di UITextView. Saya telah membuat subkelas UITextView dan menyalin contoh dari dokumen Apple di sini:

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

Saya cukup membuat UiTextView di IB dan mengatur kelasnya ke kelas CustomTextView saya. Sayangnya ini tidak berhasil. Meskipun, jika saya menyetel CustomTextView saya ke subkelas UIView, itu berfungsi dengan baik. Ada bantuan di sini?

Saya juga membuat contoh proyek yang sangat sederhana dari situasi saya di sini:

apps.popsweet.com/TextViewTrial.zip


person Kyle Zaragoza    schedule 16.07.2010    source sumber


Jawaban (2)


Jadi saya akhirnya menggunakan yang berikut ini dengan hasil yang saya inginkan, saya menempatkan blok berikut dalam metode viewDidLoad pada pengontrol tampilan saya seperti yang diisyaratkan Alex:

- (void)viewDidLoad {
    [super viewDidLoad];

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

Kemudian saya menambahkan yang berikut ini ke pengontrol tampilan untuk menampilkan item secara kondisional ketika teks dipilih dalam UITextView yang saya beri nama "textView":

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

Saya memilih untuk menempatkan metode canPerformAction:withSender: di pengontrol tampilan alih-alih kelas UITextView khusus karena dengan cara ini opsi lain (misalnya salin, potong, tempel, dll.) berperilaku seperti biasanya karena metode ini dipanggil pada setiap objek meningkatkan rantai responden.

person Kyle Zaragoza    schedule 20.07.2010
comment
Namun +1 ketika saya melakukan ini, metode changeColor menunjuk ke kelas TableViewCell khusus saya dan mogok karena tidak ada. Bisakah saya mengarahkan ini ke pengontrol tampilan? - person ingh.am; 08.11.2010
comment
Anda mungkin perlu memastikan UIWindow adalah jendela kunci dan menerapkan metode ini: - (BOOL)canBecomeFirstResponder { return YES; } - person Paul Solt; 28.11.2012

Saya hanya bisa membuat item menu khusus yang SELALU ada di menu popup, dengan melakukan hal berikut:

- (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];
    }
}

Ini disebut dalam viewDidLoad dari pengontrol tampilan.

Saya masih berjuang untuk membuat ini hanya menampilkan item menu saya secara kondisional (jika, misalnya, ada sesuatu yang dipilih), dengan mencegat peristiwa yang memanggil pengontrol menu. Sejauh ini saya tidak dapat melakukan ini.

person Alex    schedule 19.07.2010