0

UIScrollView里面有很多其他的子视图。大多数子视图都是UITextView's,当它们全部加载时,滚动和一切都很好。但是对于其中一个视图,我正在加载 aUIView和其中的MKMapViewa UITextView。当用户想要滚动 时UIScrollView,他们不能触摸UIView或其内容。我无法设置setUserInteractionEnabled为 NO,因为我需要用户能够单击MKMapView然后转到另一个UIViewController地图。对此有什么建议吗?我有以下代码:

    CGRect dealDescRect = CGRectMake(10, 10, delegate.scrollView.frame.size.width - 22 - 20, 120);
    mapView = [[MKMapView alloc] initWithFrame:dealDescRect];
    mapView.layer.cornerRadius = cornerRadius;
    mapView.scrollEnabled = NO;
    mapView.zoomEnabled = NO;

    BOOL result = [self loadAddressIntoMap];
    if (result == TRUE) {
        UITapGestureRecognizer* recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        [mapView addGestureRecognizer:recognizer];
    }

    UITextView *addressTextView = [self generateTextView:addressText :5];
    addressTextView.editable = NO;
    [addressTextView setFont:[UIFont systemFontOfSize:fontSize]];
    [addressTextView setUserInteractionEnabled:NO];
    CGRect addressTextViewFrame = addressTextView.frame;
    addressTextViewFrame.origin.x = 0;
    addressTextViewFrame.origin.y = 130;
    addressTextViewFrame.size.height = addressTextView.contentSize.height + 15;
    addressTextView.frame = addressTextViewFrame;

    CGRect viewRect = CGRectMake(10, 145, delegate.scrollView.frame.size.width - 22, addressTextView.contentSize.height + 135);
    viewRect.origin.x = 11;
    viewRect.origin.y = startTop;
    UIView *view = [[UIView alloc] initWithFrame:viewRect];
    view.layer.cornerRadius = cornerRadius;

    [view setBackgroundColor:[UIColor whiteColor]];
    [view addSubview:mapView];
    [view addSubview:addressTextView];

编辑

出于某种奇怪的原因,如果我将其更改UIView为 a UITextView,它会起作用!不确定这里的真正解决方案是什么。我只是禁用编辑。

4

1 回答 1

1

如果是我,而不是使用手势识别器来观察地图上的点击,我会创建一个自定义类型 (UIButtonTypeCustom) 的 UIButton 并给它没有背景和文本,并将它放在地图的顶部与地图相同的框架。

这样做的好处是可以防止用户与地图进行交互,根据需要移动到下一页,并且如果用户开始滚动,即使他们能够在地图上滚动。

于 2013-03-23T16:44:21.280 回答