iphone sdk - проблема со вставкой в ​​текущее местоположение текста - PullRequest
0 голосов
/ 16 мая 2010

Я пытаюсь вставить текст прямо туда, где сейчас находится курсор. Я пытался сделать то, что он говорит в: - http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html

Основная проблема в том, что я не могу просто перейти textbox1.text (и т. Д.), Потому что текстовое поле находится в середине пользовательской ячейки. Я просто хочу добавить текст к курсору (когда я нажимаю специальную клавишу на клавиатуре).

-Я просто хочу вставить десятичное число в текстовое поле ...

Я получаю ошибку:

2010-05-15 22: 37: 20.797 PageControl [37962: 207] * - [MyDetailController paste:]: нераспознанный селектор, отправленный экземпляру 0x1973d10 2010-05-15 22: 37: 20.797 PageControl [37962: 207] * Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '*** - [MyDetailController paste:]: нераспознанный селектор, отправленный экземпляру 0x1973d10'

Примечание. У меня есть доступ к тегу текстового поля (если это поможет?)

Я немного прошел начальную стадию в объективе-c, но все еще не великолепен. Мой код в настоящее время ниже, и на https://gist.github.com/d634329e5ddf52945989

Спасибо всем.


MyDetailController.h

    @interface MyDetailController : UITableViewController <UITextFieldDelegate,UINavigationControllerDelegate>
{

//...(lots in here)

}


@end


@interface UIResponder(UIResponderInsertTextAdditions)
- (void) insertText: (NSString*) text;
@end

MyDetailController.m

@implementation MyDetailController


//.... (lots in here)



- (void)addDecimal:(NSNotification *)notification {
    // Apend the Decimal to the TextField.
    //savedAmount.text = [savedAmount.text stringByAppendingString:@"."];

    NSLog(@"Decimal Pressed");
    NSLog(@"tagClicked: %d",tagClicked);
    switch (tagClicked) {
        case 7:

            //savedAmount.text = [savedAmount.text stringByAppendingString:@"."];
            break;
        case 8:
            //goalAmount.text = [goalAmount.text stringByAppendingString:@"."];
            break;
        case 9:
            //incrementAmount.text = [incrementAmount.text stringByAppendingString:@"."];
            break;      
        case 10:
            //incrementAmount.text = [incrementAmount.text stringByAppendingString:@"."];
        break;  
    }

    [self insertText:@"."];
}

-(void)textFieldDidBeginEditing:(UITextField *)textfield{

    //UITextField *theCell = (UITextField *)sender;
    tagClicked = textfield.tag;
    NSLog(@"textfield changed. tagClicked: %d",tagClicked);



}

@end

    @implementation UIResponder(UIResponderInsertTextAdditions)

    - (void) insertText: (NSString*) text
    {
        // Get a refererence to the system pasteboard because that's
        // the only one @selector(paste:) will use.
        UIPasteboard* generalPasteboard = [UIPasteboard generalPasteboard];

        // Save a copy of the system pasteboard's items
        // so we can restore them later.
        NSArray* items = [generalPasteboard.items copy];

        // Set the contents of the system pasteboard
        // to the text we wish to insert.
        generalPasteboard.string = text;

        // Tell this responder to paste the contents of the
        // system pasteboard at the current cursor location.
        [self paste: self];

        // Restore the system pasteboard to its original items.
        generalPasteboard.items = items;

        // Free the items array we copied earlier.
        [items release];
    }

    @end

1 Ответ

1 голос
/ 16 мая 2010

UIViewController - это UIResponder ... но не UIResopnder должен получать сообщение insertText :. Вы хотите вызвать insertText: для самого UITextField. Если вы посмотрите на UIResponder.h, вы увидите следующий комментарий возле вставки: метод

// эти методы не реализованы в NSObject

Это означает, что звонить им не обязательно с любого UIResponder. Их можно безопасно вызывать только на подклассах, таких как UITextField и UITextView, которые фактически их реализуют. Это было действительно странное дизайнерское решение со стороны Apple.

...