Вопрос по – Добавьте пользовательский UIButton в вспомогательное представление UIKeyboard для UIWebView

1

Мне нужно добавить кнопку камеры вUIWebViewпанель инструментов для просмотра вспомогательного оборудования клавиатуры (на которой уже есть кнопки «Назад | Далее» и «Готово»).

Есть простой способ сделать это?

Ваш Ответ

2   ответа
0

Есть более простой способ сделать это.

Держите уведомление клавиатуры в вашемviewDidLoad

После этого вам понадобится только следующий метод:

-(void)keyboardDidShow:(NSNotification*)notif
{
    NSArray *array = [[UIApplication sharedApplication] windows];

    for (UIWindow* wind in array) {
        for (UIView* currView in wind.subviews) {
            if ([[currView description] hasPrefix:@"<UIPeripheralHostView"]) {
                for (UIView* perView in currView.subviews) {
                    if ([[perView description] hasPrefix:@"<UIWebFormAccessory"]) {

                        UIBarButtonItem *doneBttn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyBoard)];

                        NSMutableArray *arr = [[NSMutableArray alloc] initWithArray: [(UIToolbar *) perView items]];

                    [arr addObject:doneBttn];

                    [(UIToolbar *) perView setItems:arr];
                    }
                }

            }
        }
    }
}

Я в основном взял оригинальные кнопки «предыдущий / следующий» из UIWebFormAccessory и добавил кнопку «Готово» в конец, но вы можете добавить к этому любые кнопки, какие захотите.

Некоторые могут подумать, что это не должно быть реализовано в-(void)keyboardDidShow: потому что вы изменяете пользовательский интерфейс после того, как он отображается на экране, но пока я не заметил каких-либо проблем с этим. (проверено только в симуляторе)

Надеюсь, это было полезно!

0

Я все еще ищу лучший способ сделать это, но на данный момент одним из решений было бы уничтожить планку и воссоздать ее следующим образом:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    NSURL *aURL = [NSURL URLWithString:@"http://www.google.com"];
    NSURLRequest *aRequest = [NSURLRequest requestWithURL:aURL];
    [web loadRequest:aRequest];
    [self.view addSubview:web];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
}

- (void)keyboardWillShow:(NSNotification *)notification {
    [self performSelector:@selector(removeBar) withObject:nil afterDelay:0];
}

- (void)removeBar {
    UIWindow *keyboardWindow = nil;
    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {
        if (![[testWindow class] isEqual:[UIWindow class]]) {
            keyboardWindow = testWindow;
            break;
        }
    }

    for (UIView *possibleFormView in [keyboardWindow subviews]) {
        // iOS 5 sticks the UIWebFormView inside a UIPeripheralHostView.
        if ([[possibleFormView description] rangeOfString:@"UIPeripheralHostView"].location != NSNotFound) {
            for (UIView *subviewWhichIsPossibleFormView in [possibleFormView subviews]) {
                if ([[subviewWhichIsPossibleFormView description] rangeOfString:@"UIWebFormAccessory"].location != NSNotFound) {

                    UISegmentedControl *nav = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Previous",@"Next", nil]];
                    nav.momentary = YES; 
                    nav.frame = CGRectMake(5, 8, 120, 30); 
                    nav.segmentedControlStyle = UISegmentedControlStyleBar;
                    nav.tintColor = [UIColor colorWithWhite:0.25 alpha:1];
                    [nav addTarget:self action:@selector(navigate) forControlEvents:UIControlEventValueChanged];

                    UIBarButtonItem *pictureBtn =[[UIBarButtonItem alloc] initWithTitle:@"Picture" style:UIBarButtonItemStyleBordered target:self action:@selector(takePic:)];

                    UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
                    UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];

                    NSArray *buttons = [NSArray arrayWithObjects:flexButton,pictureBtn,flexButton,doneButton, nil];
                    [(UIToolbar *)subviewWhichIsPossibleFormView addSubview:nav];
                    [(UIToolbar *)subviewWhichIsPossibleFormView setItems:buttons];

                }
            }
        }
    }
}

Но затем вы должны снова реализовать предыдущую, следующую и готовую функцию. Но это не самая сложная часть.

Я рассмотрел оба примера, и они просто показывают, как создать новое вспомогательное представление. Я хочу использовать стандартный, который отображается с uiwebview, но просто добавить одну кнопку. Кнопка камеры, которая позволит пользователю использовать камеру для сканирования штрих-кода. Как добавить кнопку в существующую настройку? Hackmodford
Хорошо я отредактировал свой ответ

Похожие вопросы