【问题标题】:Tapping near a button on navigation invokes the button - unexpected iPhone behaviour在导航按钮附近点击会调用该按钮 - 意外的 iPhone 行为
【发布时间】:2010-01-21 01:06:50
【问题描述】:

我有一个 UIViewController 类,其中显示了一个导航栏,并且在导航栏的最右端有一个按钮。然后在它的正下方是我的主要内容区域,导航栏下方显示了 UISegmentedControl。

每当我点击/点击右侧按钮附近的导航栏而不是直接点击按钮时,我都会收到意外的按钮按下事件。通常,当我尝试点击恰好位于按钮下方的最右边的分段项目时。所以点击是在按钮而不是片段上。如何确保将事件定向到正确的接收者?

我的 UI 是使用 Interface Builder 创建的,并且 UISegmentedControl 在 nib 文件中连接到我的类。

我的班级:

@interface MyViewController : UIViewController
{
    IBOutlet UISegmentedControl *segmentedControl;

}
@end

@implementation MyViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{
UIBarButtonItem *button = [[UIBarButtonItem alloc] 
                       initWithBarButtonSystemItem:UIBarButtonSystemItemCamera 
                       target:self action:@selector(onButtonPressed:)];                                    

self.navigationItem.rightBarButtonItem = button;
[button release];
}

- (IBAction)onButtonPressed:(id)sender 
{
    NSLog(@"onButtonPressed reached!");
}

- (IBAction)onSegmentItemPressed:(id)sender 
{
    NSLog(@"onSegmentItemPressed for: %d", [segmentedControl selectedSegmentIndex]);

}
@end

【问题讨论】:

    标签: iphone


    【解决方案1】:

    这是标准行为。它旨在使这些小按钮更容易按下。您可以在任何带有导航栏的应用程序中尝试它,您将获得相同的结果。如果没有看到您的应用程序的布局,我会认为您要么错过了该片段(尝试更仔细地点击),要么该片段太靠近导航栏按钮(稍微移动它)。

    或许可以使用hitTest:方法来判断是否触碰在segment中,并手动激活,但我觉得这样麻烦多于它的价值。

    【讨论】:

      【解决方案2】:

      您可能需要将分段控件的原点垂直向下移动,远离导航栏按钮项,以防止意外点击。

      【讨论】:

      • 如何让它看起来像这样,在导航栏和段控件出现的位置视觉上没有间隙?我希望他们看起来像一个坐在另一个正下方......
      • 我不认为你可以让它看起来没有间隙。如果没有间隙,则触摸事件可能会稍微不准确并触发错误的按钮。或许你可以将分段控件直接放在导航栏中,而不是。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多