iOS应用开发:自定义组合框控件

在将一个包含许多组合框的Android应用移植到iOS平台时,面临着一个挑战:iOS并没有内置的组合框控件。为了解决这个问题,设计了一个使用UITextFieldUIPickerView来模拟组合框输入的解决方案,类似于Safari浏览器中HTML select字段的实现方式。

实现细节

创建了一个UIViewController的子类,其中包含了一个UITextField和一个箭头图标,使其看起来像一个组合框。当用户触摸UITextField时,会触发以下动作:

- (IBAction)showPicker:(id)sender { pickerView = [[UIPickerView alloc] init]; pickerView.showsSelectionIndicator = YES; pickerView.dataSource = self; pickerView.delegate = self; UIToolbar* toolbar = [[UIToolbar alloc] init]; toolbar.barStyle = UIBarStyleBlackTranslucent; [toolbar sizeToFit]; UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneClicked:)]; [toolbar setItems:[NSArray arrayWithObjects:flexibleSpaceLeft, doneButton, nil]]; textField.inputView = pickerView; textField.inputAccessoryView = toolbar; }

在用户完成选择并点击“完成”按钮时,会调用以下方法:

- (void)doneClicked:(id)sender { [textField resignFirstResponder]; }

附加的源代码文件iPhoneComboBox_src.zip包含了用于与现有项目集成的子类ControllerViewiPhoneComboBox_demo.zip包含了使用ComboBox ControllerView的演示应用程序的源代码。

如何使用代码

打开Xcode并创建一个“Single View Application”,命名为ComboBoxTest。确保勾选了“Use Automatic Reference Counting”选项。下载并解压iPhoneComboBox_src.zip到名为ComboBox的文件夹中(双击zip文件)。将ComboBox文件夹拖放到Xcode项目中,并确保勾选了“Copy items into destination group's folder”和“Create groups for any added folders”选项。

编辑ViewController.h文件:添加#import "ComboBox.h",声明ComboBox* combo1;。头文件应该如下所示:

#import #import "ComboBox.h" @interface ViewController : UIViewController { ComboBox* combo1; } @end

编辑ViewController.m文件,在viewDidLoad方法中添加以下内容:

NSMutableArray* fruitsArray = [[NSMutableArray alloc] init]; [fruitsArray addObject:@"Apple"]; [fruitsArray addObject:@"Banana"]; [fruitsArray addObject:@"Orange"]; combo1 = [[ComboBox alloc] init]; [combo1 setComboData:fruitsArray]; //Assign the array to ComboBox [self.view addSubview:combo1.view]; combo1.view.frame = CGRectMake(110, 69, 120, 31); //ComboBox location and size (x,y,width,height)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485