在if语句中只显示一个AlertView

时间:2014-04-15 09:13:50

标签: ios if-statement uialertview

我正在忙着制作一个应用程序,如果一个坐标点击其中一个多边形,我想要显示UIAlerView。 我得到了这个,它工作正常:

    for (id<MKOverlay> overlay in myMapView.overlays)
    {
        if ([overlay isKindOfClass:[MKPolygon class]])
        {
            MKPolygon *polygon = (MKPolygon *)overlay;

            CGMutablePathRef mpr = CGPathCreateMutable();

            MKMapPoint *polygonPoints = polygon.points;

            for (int p=0; p < polygon.pointCount; p++)
            {
                MKMapPoint mp = polygonPoints[p];
                if (p == 0)
                    CGPathMoveToPoint(mpr, NULL, mp.x, mp.y);
                else
                    CGPathAddLineToPoint(mpr, NULL, mp.x, mp.y);
            }

            CGPoint mapPointAsCGP = CGPointMake(mapPointToTest.x, mapPointToTest.y);

            BOOL pointIsInPolygon = CGPathContainsPoint(mpr, NULL, mapPointAsCGP, FALSE);

            NSLog(@"Coordinate %f,%f is in polygon %@: %@",
                  coordinateToTest.latitude, coordinateToTest.longitude,
                  polygon.title,
                  (pointIsInPolygon ? @"Yes" : @"No"));

            if (pointIsInPolygon == 1) {
                   UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Uw vuilnisdag" message:@"Op dinsdag 06:00 en vrijdag 06:00" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Stel notificatie in", nil];
                    [alertView show];
                } else {
                    UIAlertView *alertViewN = [[UIAlertView alloc]initWithTitle:@"Sorry" message:@"Geen ophaaldag gevonden in uw gebied" delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
                    [alertViewN show];
               }

            CGPathRelease(mpr);
        }
    }

在for循环中,CGPathContainsPoint代码会检查所有MKPolygon。 最后我得到一个结果:1或0。

  • 1 =表示其中一个多边形中有一个点
  • 0 =表示在多边形
  • 中找不到任何一点

现在的问题是,如果结果是0,我会得到8次AlertView。 有没有一种简单的方法来摆脱这个? 感谢


更新1

这是警告View委托。 不确定要在buttonIndex == 0中放入什么值。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 0 ){
        //
    }
}

更新2

这是我到目前为止所得到的。 我正在玩isKindOfClass:[NSString class] ..没有成功。

BOOL pointIsInPolygon = CGPathContainsPoint(mpr, NULL, mapPointAsCGP, FALSE);

            NSLog(@"Coordinate %f,%f is in polygon %@: %@",
                  coordinateToTest.latitude, coordinateToTest.longitude,
                  polygon.title,
                  (pointIsInPolygon ? @"Yes" : @"No"));

            if (pointIsInPolygon == 1) {
                pointIsInPolygon = TRUE;
                   UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Uw vuilnisdag" message:@"Op dinsdag 06:00 en vrijdag 06:00" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Stel notificatie in", nil];
                //[alertView show];

                } else {
                    UIAlertView *alertViewN = [[UIAlertView alloc]initWithTitle:@"Sorry" message:@"Geen ophaaldag gevonden in uw gebied" delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
                    //[alertViewN show];
               }

            CGPathRelease(mpr);
        }
    }

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    //this would be the yes button or cancel
    if (buttonIndex == 0 ){
        NSLog(@"ButtonIndex Okay");
    }
} 

1 个答案:

答案 0 :(得分:0)

您必须在创建时将警报视图的委托设置为self,并实现在取消警报时执行的委托方法。在演示后,请保留对警报视图的引用。

在警报视图委托方法中(在用户关闭警报视图后),将引用重置为nil。当您满足显示警报视图的条件时,仅在引用等于nil时显示。

修改 在您的特定情况下:

它说:

if (pointIsInPolygon == 1){
    // ...
}

不是显示警报,而是将标志设置为true。循环浏览所有八个元素后,如果该标志为真,则仅显示1个警告。