Богатый текстовый редактор на веб-сайте для iPhone - PullRequest
4 голосов
/ 30 января 2012

Мне нужно создать расширенный текстовый редактор (для выравнивания текста, шрифтов, полужирного шрифта, курсива, подчеркивания и т. Д.) Для приложения для iPhone. Я слышал о хранении данных в виде HTML и рендеринга их в UIWebView. Я хочу разрешить пользователю редактировать данные, и в моем приложении я использую TapDetectingWindow для обнаружения касаний в UIWebView (точно так же, как подробно здесь ).

- (id)init {
    self = [super init];
    if (self) {
          tapDetectingWindow = (TapDetectingWindow *)[[UIApplication sharedApplication].windows objectAtIndex:0]; //mWindow, variable reference to TapDetectingWindow
        tapDetectingWindow.viewToObserve = webView;  
        tapDetectingWindow.controllerThatObserves = self;    

        webView = [[UIWebView alloc] init];
        [webView setFrame:CGRectMake(0, 0, 340, 1900)];
        [webView setTag:1];
        [webView addSubview:keyboardText];
        [webView setDelegate:self];
        [webView setOpaque:0.0];

        [webView loadHTMLString:htmlString baseURL:NULL];
        [self.view  addSubview:webView];

        keyboardText = [[UITextField alloc] init];
        keyboardText.autocorrectionType = UITextAutocorrectionTypeNo;   
        [keyboardText setDelegate:self];
        [self.view addSubview:keyboardText];
    }
    return self;
}

Но мое приложение падает, с сообщением

tapDetectingWindow.viewToObserve = webView

и отчет

* -[UIWindow setViewToObserve:]: unrecognized selector sent to instance 0x4a26b90 

1 Ответ

3 голосов
/ 14 марта 2012

После нескольких часов стрижки волос, вот ответ: вам нужно отредактировать файл .m вашего AppDelegate, чтобы заставить TapDetectingWindow работать должным образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIViewController* vc = self.window.rootViewController;
    self.window = [[TapDetectingWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = vc;

    return YES;    
}

Я попробовал это, и он отлично работает сОстальная часть руководства TapDetectingWindow !

...