Строка UIPasteBoard никогда не получает правильное значение после вырезания текста

Я вырезал текст в текстовом представлении с помощью UIMenuController и хочу вставить его в другое место. Но строка UIPasteBoard никогда не получает правильного значения. К вашему сведению, это просто происходит в процессе нарезки, но это не проблема при копировании.

Например: я скопировал «XYZ» и вставил его, строка UIPasteBoard содержит правильное значение, есть «XYZ»

затем я хочу вырезать «ABC» и вставить его, но строка UIPasteBoard содержит неправильное значение, она по-прежнему «XYZ», а не «ABC», и вывод xcode дает мне текст Webcore NSBeep()!

Я не понимаю, почему это может произойти, может кто-нибудь подсказать? Спасибо

ОБНОВЛЕНИЕ

я просто использую метод canPerformAction:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{

    return [super canPerformAction:action withSender:sender];
}

person R. Dewi    schedule 25.04.2012    source источник
comment
Покажите код, который вы используете для вырезания и вставки, и любой код между этими транзакциями (которые имеют отношение к этому вопросу).   -  person WrightsCS    schedule 25.04.2012
comment
@WrightsCS, я обновил свой вопрос, знаете ли вы, что такое Webcore NSBeep()! значит?   -  person R. Dewi    schedule 25.04.2012


Ответы (2)


Вот как вы должны установить монтажный стол с простым текстом:

[[UIPasteboard generalPasteboard] setString:@"XYZ"];

Используя свои собственные UIMenuController:

UIMenuItem * copy = [[UIMenuItem alloc] initWithTitle:@"Copy Text" action:@selector(copyText:)];

UIMenuController * actionMenu = [UIMenuController sharedMenuController];
[actionMenu setMenuItems:[NSArray arrayWithObjects: copy, nil]];
[actionMenu setTargetRect:someButton.frame inView:someButton.superview];
[actionMenu setArrowDirection:UIMenuControllerArrowDefault];
[actionMenu setMenuVisible:YES animated:YES];

-(void)copyText:(id)sender {
    UIButton * button = (UIButton*)sender;
    [[UIPasteboard generalPasteboard] setString:button.titleLabel.text];
}
person WrightsCS    schedule 25.04.2012
comment
где я должен буду положить это? - person R. Dewi; 25.04.2012
comment
нет. Я не уверен, какой у вас другой код, меню у вас как-то вызывается. будь то IBAction или что-то еще. - person WrightsCS; 25.04.2012
comment
Итак, я должен сделать подкласс UIMenuController? - person R. Dewi; 25.04.2012
comment
я не вызывал uimenucontroller в своем коде, menucontroller появляется после того, как я выбираю текст - person R. Dewi; 25.04.2012
comment
если вы используете копирование / вставку системного меню, iOS должна справиться со всем этим. - person WrightsCS; 25.04.2012
comment
у меня то же самое предположение, но тогда у меня есть эта проблема - person R. Dewi; 25.04.2012
comment
тогда используйте мой метод и создайте свое собственное меню, чтобы вы могли контролировать, что происходит на вашем монтажном столе и как оно обрабатывается. - person WrightsCS; 25.04.2012

Например: я скопировал «XYZ» и вставил его, строка UIPasteBoard содержит правильное значение, есть «XYZ»

затем я хочу вырезать «ABC» и вставить его, но строка UIPasteBoard содержит неправильное значение, оно по-прежнему «XYZ», а не «ABC», и вывод xcode дает мне текст Webcore NSBeep()!

Ответ: Webcore NSBeep()! потому что "ABC" не копируется в буфер обмена, а ошибка уведомляется звуковым сигналом (ИМХО, что не является разумным способом уведомления об ошибках любой платформой, это было бы любая визуальная индикация)

И обратите внимание: NSBeep() является частью фреймворка ApplicationKit, которого нет на iPhone.

person Vinayak Bevinakatti    schedule 22.06.2012
comment
спасибо за ответ, подскажите как решить эту проблему? - person R. Dewi; 25.06.2012