gpt4 book ai didi

objective-c - 将 UIToolbar 添加到某些文本字段的输入附件 View

转载 作者:技术小花猫 更新时间:2023-10-29 11:22:42 29 4
gpt4 key购买 nike

在寻找我的第一个 iPhone 应用程序时,我发布了有关处理 iOS 键盘上返回键的正确方法。现在我需要找出键盘上方的工具栏,其中包含上一个/下一个和完成按钮。我一直在使用来自以下站点的示例: Input Accessory View

该示例有效,但我想使用 UIToolbar 和 UIBarButtonItem 而不仅仅是带有按钮的常规 View 。我尝试了各种组合,但都没有用。这是我目前所拥有的。

标题:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>
{
UITextField* txtActiveField;
UIToolbar* keyboardToolbar;
UIBarButtonItem* btnDone;
UIBarButtonItem* btnNext;
UIBarButtonItem* btnPrev;
}

@property (nonatomic, strong) IBOutlet UITextField* firstNameTextField;
@property (nonatomic, strong) IBOutlet UITextField* lastNameTextField;
@property (nonatomic, strong) IBOutlet UITextField* cityTextField;

@property (nonatomic, strong) UITextField* txtActiveField;
@property (nonatomic, strong) UIToolbar* keyboardToolbar;
@property (nonatomic, strong) UIBarButtonItem* btnDone;
@property (nonatomic, strong) UIBarButtonItem* btnNext;
@property (nonatomic, strong) UIBarButtonItem* btnPrev;

-(void)createInputAccessoryView;

@end

来源:

#import "ViewController.h"

@implementation ViewController

@synthesize firstNameTextField = _firstNameTextField;
@synthesize lastNameTextField = _lastNameTextField;
@synthesize cityTextField = _cityTextField;

@synthesize txtActiveField = _txtActiveField;
@synthesize keyboardToolbar = _keyboardToolbar;
@synthesize btnDone = _btnDone;
@synthesize btnNext = _btnNext;
@synthesize btnPrev = _btnPrev;

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];

[self createInputAccessoryView];
}

- (void)viewDidUnload
{
[self setFirstNameTextField:nil];
[self setLastNameTextField:nil];
[self setCityTextField:nil];

[self setTxtActiveField:nil];
[self setKeyboardToolbar:nil];
[self setBtnDone:nil];
[self setBtnNext:nil];
[self setBtnPrev:nil];

[super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}

-(void)gotoPrevTextfield
{
if (self.txtActiveField == self.firstNameTextField)
{
return;
}
else if (self.txtActiveField == self.lastNameTextField)
{
[self.firstNameTextField becomeFirstResponder];
}
else if (self.txtActiveField == self.cityTextField)
{
[self.lastNameTextField becomeFirstResponder];
}
}

-(void)gotoNextTextfield
{
if (self.txtActiveField == self.firstNameTextField)
{
[self.lastNameTextField becomeFirstResponder];
}
else if (self.txtActiveField == self.lastNameTextField)
{
[self.cityTextField becomeFirstResponder];
}
else if (self.txtActiveField == self.cityTextField)
{
return;
}
}

-(void)doneTyping
{
[self.txtActiveField resignFirstResponder];
}

-(void)createInputAccessoryView
{
self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
self.keyboardToolbar.barStyle = UIBarStyleBlackTranslucent;
self.keyboardToolbar.tintColor = [UIColor darkGrayColor];

btnPrev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:@selector(gotoPrevTextfield:)];
btnNext = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:@selector(gotoNextTextfield:)];
btnDone = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTyping:)];

[self.keyboardToolbar addSubview:(UIView*)btnPrev];
[self.keyboardToolbar addSubview:(UIView*)btnNext];
[self.keyboardToolbar addSubview:(UIView*)btnDone];

[self.firstNameTextField setInputAccessoryView:self.keyboardToolbar];
[self.lastNameTextField setInputAccessoryView:self.keyboardToolbar];
[self.cityTextField setInputAccessoryView:self.keyboardToolbar];
}

-(void)textFieldDidBeginEditing:(UITextField*)textField
{
self.txtActiveField = textField;
}
@end

当我启动应用程序时,我得到:

012-01-21 09:31:19.798 KeyboardToolbar[14772:f803] -[UIBarButtonItem superview]: unrecognized selector sent to instance 0x6b19350
2012-01-21 09:31:19.799 KeyboardToolbar[14772:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIBarButtonItem superview]: unrecognized selector sent to instance 0x6b19350'
*** First throw call stack:
(0x13bc052 0x154dd0a 0x13bdced 0x1322f00 0x1322ce2 0x5042f 0x4a72b 0x3422 0x2a58 0xd964e 0x39a73 0x39ce2 0x39ea8 0x40d9a 0x11be6 0x128a6 0x21743 0x221f8 0x15aa9 0x12a6fa9 0x13901c5 0x12f5022 0x12f390a 0x12f2db4 0x12f2ccb 0x122a7 0x13a9b 0x2728 0x2685 0x1)
terminate called throwing an exception

我的假设是我没有正确分配其中一个元素。我还想知道我是否需要在类中为按钮添加字段,或者是否可以将这些字段添加到工具栏。我在标题中放了一行,这样我就不必将所有方法都放在文件的开头。还不知道转发声明方法的语法,就像在 C 中可以做的那样。

谢谢。

更新:

所以我对 createInputAccessoryView 做了一些修改。我现在正在使用 addItems 添加按钮。我将按钮变量设为本地(但与以前一样存在相同的问题)。好消息是应用程序不再崩溃,坏消息是工具栏显示,但没有任何按钮。不确定我还需要做什么才能让按钮实际显示。我看到的所有例子都是相似的。

-(void)createInputAccessoryView
{
self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
self.keyboardToolbar.barStyle = UIBarStyleBlackTranslucent;
self.keyboardToolbar.tintColor = [UIColor darkGrayColor];

UIBarButtonItem* previousButton = [[UIBarButtonItem alloc] initWithTitle:@"Previous" style:UIBarButtonItemStyleBordered target:self action:@selector(gotoPrevTextfield)];
UIBarButtonItem* nextButton = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(gotoNextTextfield)];
UIBarButtonItem* flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTyping:)];

[keyboardToolbar setItems:[NSArray arrayWithObjects: previousButton, nextButton, flexSpace, doneButton, nil] animated:NO];

[self.firstNameTextField setInputAccessoryView:self.keyboardToolbar];
[self.lastNameTextField setInputAccessoryView:self.keyboardToolbar];
[self.cityTextField setInputAccessoryView:self.keyboardToolbar];
}

最佳答案

UIBarButtonItem 不是 UIView 的子类,因此您不能将它添加为 UIToolbar 的 subview 。相反,使用工具栏上的 – setItems:animated: 方法来添加这些按钮。

关于objective-c - 将 UIToolbar 添加到某些文本字段的输入附件 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954331/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com