UIView中的UISegmentedControl不响应change事件

时间:2014-04-04 14:04:15

标签: ios objective-c ios7 uiview uisegmentedcontrol

我已经在iOS7 SDK上以编程方式创建了一个基本应用程序:

  1. 创建了两个UINavigationController
  2. 为每个人添加了一个视图
  3. 创建了一个包含两个项目的UITabBarController
  4. 将每个UINavigationController添加到其各自的UITabBarController
  5. 这很好用,一切都是以编程方式完成的。我的项目只包含一个简单的窗口应用程序模板,没有任何xib和故事板,所有内容都在我的AppDelegate.m的 application didFinishLaunchingWithOptions:中完成。

    我正在尝试添加一个UISegmentedControl(仍以编程方式)作为第一个UINavigationController视图的子视图,如下所示:

    // First navigation controller
    UINavigationController *firstNavController = [[UINavigationController alloc] init];
    firstNavController.navigationBar.barTintColor = [UIColor redColor];
    firstNavController.title = @"First";
    firstNavController.navigationBar.topItem.title = @"First top";
    firstNavController.tabBarItem.image = [UIImage imageNamed:@"FirstTab"];
    
    // First view
    UIView *firstView = [[UIView alloc] init];
    firstView.backgroundColor = [UIColor yellowColor];
    
    // Add a segmented control to this view
    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
                [NSArray arrayWithObjects:@"One", @"Two", nil]];
    // Register an event handler
    [segmentedControl addTarget:self action:@selector(segmentedControlSelectedIndexDidChange:)
               forControlEvents:UIControlEventValueChanged];
    // Shape it and select its first item
    segmentedControl.frame = CGRectMake(10, 100, 300, 20);
    segmentedControl.selectedSegmentIndex = 1;
    
    // add the segmented control to the view
    [firstView addSubview:segmentedControl];
    
    // and the view to the first tab's navigation controler
    [firstNavController.view addSubview:firstView];
    

    UISegmentedControl会显示,但不会处理触摸事件。

    如果我更改了我的代码并直接在UINavigationController中添加了UISegmentedControl,则触摸事件实际上正在响应:

    // and the segmented control directly within the navigation controller
    [firstNavController.view addSubview:segmentedControl];
    

    我做错了什么,如何让它回应它的触摸事件呢?

2 个答案:

答案 0 :(得分:5)

您需要设置视图的大小。

令人困惑的是,即使视图太小而无法容纳其内容,但只会响应其所在区域的官方大小。

答案 1 :(得分:2)

您不应将子视图直接添加到导航控制器视图。

'的firstView'应该封装到UIViewController中。并使用[[UINavigationController alloc] initWithRootViewController:myFirstViewController]创建导航控制器;