【发布时间】:2014-01-22 01:58:58
【问题描述】:
我在 UIViewController 的导航栏中以编程方式创建了一个 UISegmentedControl,我希望能够在切换分段控件时切换视图控制器。
这是我目前所拥有的:
@interface TVExploreViewController : TVViewController
@property (nonatomic, strong) UISegmentedControl *scopeControl;
@property (nonatomic, assign) NSInteger scope;
@property (nonatomic, strong) UIViewController *premiumContentViewController;
@property (nonatomic, strong) UIViewController *trendingContentViewController;
@property (nonatomic, strong) UIViewController *currentViewController;
@end
TVExploreViewController 的实现:
- (void)viewDidLoad {
[super viewDidLoad];
_scopeControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"TV & MOVIES", @"VIRAL CLIPS", nil]];
[_scopeControl setFrame:CGRectMake(80, 0, 200, 30)];
[_scopeControl addTarget:self
action:@selector(scopeChanged:)
forControlEvents:UIControlEventValueChanged];
[[self navigationItem] setTitleView:_scopeControl];
[_scopeControl setSelectedSegmentIndex:0];
_premiumContentViewController = [[TVPremiumContentViewController alloc] init];
_trendingContentViewController = [[TVTrendingFeedController alloc] init];
[self setScope:0];
}
- (void)scopeChanged:(id)sender {
[self setScope:self.scopeControl.selectedSegmentIndex];
}
- (void)transitionToViewController:(UIViewController *)controller
{
[self.currentViewController willMoveToParentViewController:nil];
if (controller) {
[self addChildViewController:controller];
}
controller.view.frame = self.view.bounds;
[self.view addSubview:controller.view];
[self.currentViewController.view removeFromSuperview];
[self.currentViewController removeFromParentViewController];
[controller didMoveToParentViewController:self];
self.currentViewController = controller;
}
- (void)setScope:(NSInteger)scope {
if (scope != _scope) {
_scope = scope;
UIViewController *nextController = nil;
if (_scope == 0) {
nextController = self.premiumContentViewController;
} else if (_scope == 1) {
nextController = self.trendingContentViewController;
}
[self transitionToViewController:nextController];
}
}
当我在 TVExploreViewController 中切换分段控件时,视图的其余部分保持白色,并且没有加载视图控制器。有谁知道我做错了什么?
【问题讨论】:
-
当用户更改分段控件中选定的段时,应该调用什么代码?您需要一个连接到分段控件的 UIControlEventValueChanged 事件的 IBAction,并且您根本没有显示任何 IBAction 代码。
-
我在 viewDidLoad 中有这个:
[_scopeControl addTarget:self action:@selector(scopeChanged:) forControlEvents:UIControlEventValueChanged]; -
@DuncanC 您不必使用界面生成器来创建控件...
-
@John 没错,但您确实需要一个与之连接的操作方法。哦,现在我明白了。他的代码可以手动添加分段控件,并使用方法 scopeChanged: 添加目标/操作。当我没有看到 IBAction 时,我停止了查找。我的错。
-
我不得不不同意上面的评论——遵循 Cocoa 命名约定应该足以理解正在执行哪些操作来调用该方法,而 IBAction 只是让您知道哪些方法的编译器糖由 IB 自动处理。但这不是讨论的地方,所以我现在正在使用 iPhone。
标签: ios objective-c cocoa-touch uisegmentedcontrol