我将从描述我想要完成的事情开始,然后描述我已经尝试过的事情。我很确定我所尝试的并不是最好的方法,所以请根据需要纠正我的方法!
我有一个ViewController.m
和一个自定义视图,它在CustomView.xib
中列出。自定义视图包含UIButtons
和UILabels
,这些视图是从自定义对象数组中填充的。
用户流程应该如此:ViewController
开始显示CustomView
,其标签填充
CustomObjectArray[0]
- >用户按下按钮 - > CustomView
的另一个“副本”在之前的版本中滑入视图。
它的标签和按钮由CustomObjectArray[1]
填充 - >用户按下按钮 - >重复直到数组结束。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ < / p>
到目前为止,我制作了一个ViewController.m/h
,一个CustomView.m/h
和一个CustomView.xib
文件。我使用界面构建器来进行布局。
在XIB文件中顶级视图的“自定义类”选项卡上,输入“CustomView”。我还将IBOutlets从XIB文件拖到CustomView HEADER (.h)
文件中。
在ViewController
, - (instancetype
)init
方法下,我使用普通initWithNib
方法创建自定义视图。然后我做:
self.view = CustomViewVariableName;
当我运行程序时,视图显示正常。但是,当我尝试选择器时,没有任何东西被按钮识别出来:
[currentCustomView.continueButton addTarget:self action:@selector(continueButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
我在这里做错了什么?
更重要的是,鉴于我描述的目标最高,我甚至做到了这一点吗?我需要CustomView.m/h
个文件吗?或者我可以只使用XIB和ViewController
文件执行相同的操作。请记住,我需要“多个副本”并将它们相互叠加,直到我的自定义对象数组结束。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 根据要求提供更多代码。
在ViewController
:
- (instancetype)init
{
currentCustomView = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];
self.view = currentQuizQuestionView;
.......
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[currentCustomView.continueButton addTarget:self action:@selector(continuePressed:) forControlEvents:UIControlEventTouchUpInside];
}
-(void)continuePressed:(id)sender{
NSLog(@"Current position");
//[self moveInQuestion];
}
在CustomView.h
:
#import <UIKit/UIKit.h>
@interface CustomView : UIView
@property (weak, nonatomic) IBOutlet UIButton *continueButton;
@end
在CustomView.m
:
这只是默认页面,我在此文件中没有添加任何内容。
CustomView.xib
:
答案 0 :(得分:1)
我不确定我是否完全理解您的要求。假设您希望将几个CustomView作为ViewController的子视图,并且可以在按下自己的按钮后逐个显示这些子视图。
添加子视图的第一件事:
self.view = CustomViewVariableName;
由于根据我的假设,海关视图将是子视图,因此上面的行是错误的。你可能想要这样的东西。
for (NSInteger i = 0; i < 5; i++) {
CustomView *v = [[CustomView alloc] initWithNib];
[v.button addTarget:self
action:@selector(continuePressed:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:v];
}
其次,我注意到您希望将数组作为处理程序来引用所有子视图。我们可以通过在上面的for循环中再插入一行来将上面的CustomView添加到一个可变数组中。
[_customObjectArray addObject:v.button];
最后,我创建了一个简单的项目并尝试实现您提到的内容。也许你可以把它作为参考。 https://db.tt/Och2tzyG