2

次のメソッドを使用して、下部のツールバー用にカスタムUIBarButtonItemsを作成しています。

- (void)initialisePageNoProperties
{
    pageNoTextField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
    [pageNoTextField setDelegate:self];
    pageNoTextField.text = @"0";              
    pageNoTextField.textColor = [UIColor blackColor];
    pageNoTextField.backgroundColor = [UIColor whiteColor];
    pageNoTextField.textAlignment = UITextAlignmentRight;
    pageNoTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    pageNoTextField.borderStyle = UITextBorderStyleRoundedRect;
    pageNoTextField.autocorrectionType = UITextAutocorrectionTypeNo; // no auto correction support
    pageNoTextField.keyboardType = UIKeyboardTypeNumberPad;
    pageNoTextField.returnKeyType = UIReturnKeyGo;
    [pageNoTextField setClearsOnBeginEditing:YES];

    pageNoBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:pageNoTextField];
    pageNoBarButtonItem.style = UIBarButtonItemStyleBordered;

    noOfPagesTextField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
    noOfPagesTextField.text = @"0"; 
    noOfPagesTextField.textColor = [UIColor blackColor];
    noOfPagesTextField.backgroundColor = [UIColor clearColor];
    noOfPagesTextField.textAlignment = UITextAlignmentLeft;
    noOfPagesTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    noOfPagesTextField.enabled = NO;
    noOfPagesBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:noOfPagesTextField];
}

これらのボタンは、次の方法で下部のツールバーに追加されます。

- (void)configurePageNoDisplay
{
    if(![self.navigationController isToolbarHidden])
    {
        NSMutableArray *items = [[self.navigationController.toolbar items] mutableCopy];
        bool insertIntoArray = ([items count] == 10); // without the page number display the items array will contain 10 items

        if (insertIntoArray)
        {
            [items insertObject:pageNoBarButtonItem atIndex:3];  
        }
        else 
        {
            [items replaceObjectAtIndex:3 withObject:pageNoBarButtonItem];
        }

        if (insertIntoArray)
        {
            [items insertObject:noOfPagesBarButtonItem atIndex:4]; 
        }
        else 
        {
            [items replaceObjectAtIndex:4 withObject:noOfPagesBarButtonItem];
        }

        [self.navigationController.toolbar setItems:items];
        [self SetPageNoDisplay:[pdfViewCtrl GetCurrentPage]];
    }
}

これらのボタンの値は次のように設定されます。

- (void)SetPageNoDisplay:(NSInteger) pageNumber
{
    pageNoTextField.text = [NSString stringWithFormat:@"%d", pageNumber]; 
    noOfPagesTextField.text = [NSString stringWithFormat:@"of %d", [[pdfViewCtrl GetDoc] GetPageCount]];
}

ボタンとそれに含まれるフィールドは、次のように宣言されています。

@property (strong, nonatomic) IBOutlet UIBarButtonItem *pageNoBarButtonItem;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *noOfPagesBarButtonItem;
@property (strong, nonatomic) IBOutlet UITextField *pageNoTextField;
@property (strong, nonatomic) IBOutlet UITextField *noOfPagesTextField;

当初、それらはIBOutletsとして宣言されていませんでしたが、そうすることで問題が解決するという提案を読みましたが、残念ながらそれは役に立ちませんでした。

ユーザーからのダブルタップに応じて、下部のツールバーを表示/非表示にします。

- (void)handleDoubleTap:(UITapGestureRecognizer *)gestureRecognizer
{  
    [self.navigationController setNavigationBarHidden:![self.navigationController isNavigationBarHidden] animated:true];
    [self.navigationController setToolbarHidden:![self.navigationController isToolbarHidden] animated:true];
    [self configurePageNoDisplay];
    //[sideBarTab setHidden:![sideBarTab isHidden]];
}

私が抱えている問題は、ツールバーが非表示になっていると、再表示されたときにボタンが再び表示されないことです。ツールバーを再表示した後にiPadを回転させると、ボタンが再び表示されます。

4

2 に答える 2

0

私は別のアプローチをとることでこの問題を解決することになりました。ナビゲーションコントローラーのツールバーではなく、標準のUIToolbarを使用しました。Interface Builderを使用して、ツールバーにプレーンなUIViewを追加してから、UIView内に2つのUITextFieldを追加することができました。このようにして、バーボタンアイテム内のツールバーにテキストフィールドを追加するためのすべてのコードについて心配する必要はありませんでした。または、方向の変更、ツールバーの非表示と表示などでテキストフィールドを復元するためにコードを呼び出す必要はありませんでした。はるかにシンプルで堅牢なアプローチです。

于 2012-05-23T11:44:55.487 に答える
0

setToolbarItemsUIViewControllerのメソッドを使用してツールバーボタンを設定すると、それが解決するはずです。

于 2013-04-16T04:55:42.477 に答える