我的应用程序结构简单:
ViewConroller1是一个根视图控制器;
ViewController1有一个滚动视图,其中包含另一个视图控制器ViewController2的10个实例。
ViewController2中有一个xib,在xib上有一个UIButton。 UIButton在ViewController2 .m文件中有一个动作 - 它应该在被点击时被触发。
当我运行应用程序时,我触摸按钮,它会因异常而关闭。 当我将ViewController2作为根视图控制器时,一切都按预期运行。
如何使用ViewConroller1作为根视图控制器使其正常运行?
一些代码:
ViewController1(GSMainVC.m)
#import "GSMainVC.h"
#import "GSViewController.h"
@interface GSMainVC ()
@end
@implementation GSMainVC
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad{
[super viewDidLoad];
int n=10;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
scrollView.contentSize = CGSizeMake(self.view.frame.size.width*n, self.view.frame.size.height);
for (int i = 0; i <n; i++){
GSViewController *gsVC = [[GSViewController alloc] init];
CGRect cellFrame = CGRectMake(gsVC.view.frame.size.width*i, 0, gsVC.view.frame.size.width, gsVC.view.frame.size.height);
gsVC.view.frame = cellFrame;
[scrollView addSubview:gsVC.view];
}
[self.view addSubview:scrollView];
}
@end
ViewController2 .h(GSViewController.h)
#import <UIKit/UIKit.h>
@interface GSViewController : UIViewController
@property (nonatomic) NSInteger number;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UILabel *subtitleLabel;
@property (weak, nonatomic) IBOutlet UILabel *daysPlayedLabel;
@property (weak, nonatomic) IBOutlet UIButton *repeatButton;
- (IBAction)toggleRepeat:(id)sender;
@end
ViewConroller2 .m(GSViewController.m)
#import "GSViewController.h"
@implementation GSViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (IBAction)toggleRepeat:(id)sender {
NSLog (@"hello");
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
@end
答案 0 :(得分:0)
正如约翰所说:
一种可能性是,当您添加子控制器的视图时,您不会保留这些控制器,然后您的按钮会尝试发送重新分配对象的消息。通常,这种视图控制器跳动通常是错误的方法:每个视图都不需要自己的控制器。
正如其他人所提到的,它看起来像是在发明自行车,特别是当工具UICollectionView
可用时。这就是我现在要挖掘的方式。