我有一个实现分段控件的自定义库(devinross/tapkulibrary)。该分段控件放置在主视图的子视图中。现在,当我在分段控件上更改控件时,我将切换到新的viewcontroller并在完全相同的位置重新绘制分段控件。但这在某些情况下给我造成了动画期间的一些问题。
是否有可能我可以将新视图控制器的分段控件属性分配给当前属性,从而在各种视图控制器上使用相同的分段控件。
// First.h
@property (weak, nonatomic) IBOutlet UIView *segmentedView;
@property (nonatomic, strong) TKMultiSwitch *multiswitch;
// First.m
- (void)viewDidLoad {
//multiSwitch initializations
[self.multiswitch addTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged];
[self.segmentedView addSubview:self.multiswitch];
}
-(void) changedSegmentedControl:(id)sender {
switch(sender.indexOfSelectedItem)
{
case 1:
Second *controller = (Second*)[self.storyboard instantiateViewControllerWithIdentifier:@"secondvc"];
controller.multiswitch = self.multiswitch;
break;
}
}
// Second.h
@property (weak, nonatomic) IBOutlet UIView *segmentedView;
@property (nonatomic, strong) TKMultiSwitch *multiswitch;
// Second.m
- (void)viewDidLoad {
[self.multiswitch addTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged];
[self.segmentedView addSubview:self.multiswitch];
}
-(void) changedSegmentedControl:(id)sender {
switch(sender.indexOfSelectedItem)
{
case 0:
First *controller = (First*)[self.storyboard instantiateViewControllerWithIdentifier:@"firstvc"];
controller.multiswitch = self.multiswitch;
break;
}
}
对于First.m文件的
case 1:
部分中的switch
,我也尝试了以下操作,但很不幸:[controller.segmentedView addSubView:self.multiSwitch];
另请注意,更改分段控件后,我将无法使用子视图并显示它们。我必须更改视图控制器。
编辑:视频显示什么在工作,什么不在(这里有3个部分)
工作:https://www.youtube.com/watch?v=lI368z9ntfM
问题:https://www.youtube.com/watch?v=oTU6tIq5ZW4
最佳答案
好的,所以我无法真正理解您想做的事情以及为什么要做的某些部分。
据我了解,您想隐藏' First '控制器,而显示' Second '控制器,但是这样做,您不想释放' multiswitch '控件。我还假设您想完全丢弃' First '并在必要时重新创建它。
说实话,我真的不喜欢您的解决方案,但是我也不太了解您要做什么,因此,我只会根据上述假设给出一个答案。
在创建之前,添加以下行:第二个控制器,位于changedSegmentedControl:中。
// Remove 'self' as target. You don't want to receive signals in 'First' anymore, because once it will get released you will end up with a crash.
[self.multiswitch removeTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged];
// Remove the segmented control from it's superview. It will be added in the 'Second' controller view hierarchy.
[self.multiswitch removeFromSuperview];
现在设置好了。您也一定不要忘记将' Second '添加为' multiswitch '控件的目标。
在' Second.m '中,方法' viewDidLoad '中,添加:
[self.multiswitch addTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged];
当然,您还必须在“ Second ”中实现“changedSegmentedControl:”。
您最好重用' First '而不是' Second '(初始化为' First '控制器,而不是' Second '控制器,以便您已经具有“多开关”控件的功能)。如果您需要其他功能,请更改“ Second ”以继承“ First ”并添加所需的额外代码。
关于ios - iOS:保持 View 恒定或在各个ViewController之间传递 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28068144/