两个视图多个UIPickerViews单个sockets

我有两个视图为我的应用程序取决于它决定哪个视图的方向加载。 但IB不会允许我连接两个PickerView到同一个OUTLET,有没有办法在代码中分配连接,所以当我加载我的视图时,我分配连接到sockets?

还是应该为每个视图做所有事情?

或者我应该把我的两个视图分成不同的nib文件

请在这里帮我

谢谢

那么请记住,一个IBOutlet只是一个已经以IB方式显示的属性。 所以你的第一个问题的答案是肯定的。 如有必要,您可以随时在代码中重新分配该属性。

我认为你已经有两个IBOutlets为你的风景和肖像的意见 – 这样的事情:

@property (nonatomic, retain) IBOutlet UIView *landscapeView; @property (nonatomic, retain) IBOutlet UIView *portraitView; 

这听起来像是你在willAnimateRotationToInterfaceOrientation:duration:select适当的视图willAnimateRotationToInterfaceOrientation:duration:

同样,您可以为您的select器视图声明两个网点:

 @property (nonatomic, retain) IBOutlet UIPickerView *landscapePickerView; @property (nonatomic, retain) IBOutlet UIPickerView *portraitPickerView; 

如果你走这条路线,我会声明一个dynamic属性,总是返回当前方向的select器视图。

 @property (nonatomic, retain, readonly) UIPickerView *pickerView; 

而不是综合这个属性,你可以像这样实现它:

 - (UIPickerView *) pickerView { if (self.landscapeView.superview) { return self.landscapePickerView; } else { return self.portraitPickerView; } } 

但是,如果你有超过一个或两个子视图,像这样混淆控制器的并行属性可能会变得很痛苦。 在这种情况下,我会考虑将UIView的一个自定义的子类叫做PickerContainer,它的pickerView和其他子视图需要访问。 然后在IB中,您可以将横向和纵向视图的类更改为PickerContainer,并且可以将每个select器直接连接到其超视图。 然后在你的控制器中,你可以创build一个像这样的dynamic属性:

 @property (nonatomic, retain, readonly) PickerContainer *pickerContainer; - (PickerContainer *)pickerContainer { return (PickerContainer *)self.view; } 

然后你可以通过它的容器访问你的pickerView当前方向:

 [self.pickerContainer.pickerView reloadAllComponents]; 

编辑:这是我实现willAnimateRotationToInterfaceOrientation:duration:在我的项目之一:

 - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) { if (self.landscapeView.superview) [self.landscapeView removeFromSuperview]; self.portraitView.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2); [self.view addSubview:self.portraitView]; } else { if (self.portraitView.superview) [self.portraitView removeFromSuperview]; self.landscapeView.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2); [self.view addSubview:self.landscapeView]; } } 

我的景观和纵向视图在IB中没有支柱或弹簧,这意味着所有的边缘都是灵活的,但宽度和高度不是。

我最近将这个概念应用于我的应用程序。 在这种情况下你可以做的是给每个button分配一个int,以显示select器。
假设你有两个buttonbtn1和btn2 。 让他们的触摸动作是btn1Actionbtn2Action 。 你也可以有一个单一的工具栏为两个捡取器。 将选取器和工具栏的可见性设置为隐藏在xib中。

 -(void)btn1Action:(id)sender { picker.setHidden = NO; toolbar.setHidden = NO; iPicker = 1; // Declared globally } -(void)btn2Action:(id)sender { picker.setHidden = NO; toolbar.setHidden = NO; iPicker = 2; // Declared globally } -(void)toolbarAction:(id)sender { picker.setHidden = YES; toolbar.setHidden = YES; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if(iPicker==1) { return 10; } if(iPicker == 2) { return 8; } } - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)iComponent { if(iPicker==1) { // Your code } else if(iPicker == 2) { // Your code } } - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)iComponent { else if(iPicker == 1) { // Your code } else if (iPicker == 2) { // Your code } } 

希望这可以帮助。

 -(void)btn1Action:(id)sender { picker.setHidden = NO; toolbar.setHidden = NO; iPicker = 1; // Declared globally } -(void)btn2Action:(id)sender { picker.setHidden = NO; toolbar.setHidden = NO; iPicker = 2; // Declared globally } 

上面的代码仍然可以通过分配标签到button来最小化,然后你可以有一个单一的行动。

 -(void)buttonAction:(id)sender { picker.setHidden = NO; toolbar.setHidden = NO; iPicker = sender.tag; // Declared globally }