2013-06-20 1 views
0

나는 액션 시트 버튼에 의해 트리거 될 때 하위 뷰를 제공 (가정) 다음 코드가 : 모든 '무거운'는 서브 뷰 제거합니다을 수행 한 후하위 뷰를 제공 할 수 없습니다 UIActionSheetDelegate 방법에있는 동안

- (void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
{  
    if (buttonIndex ==0) { 
     [self.view addSubview:self.customView]; 
     // 
     // heavy lifting of method here 
     // 
     // self.customView removes itself from superview before actionSheet:dismissWithButtonIndex: finishes 
    } 
} 

을 그 자체가보기 heirachy (전에 작업 시트 대리인 메서드 완료).

아아 !! 하위 뷰가 화면에 표시되지 않는다는 것을 알았습니다. 사실 추가 된 하위 뷰를 중단하고 중단 점을 설정하는 것을 멈추게되면 이 표시되지만 이후에만 UIActionSheet 대리자 메서드가 이 완료되면이 완료됩니다.

처음에는 하위 뷰가 UIActionSheet 대리자 메서드로 표시 되었기 때문에 이것이 생각되었습니다. 작업 시트에서 뷰의 표시를 차단했습니다.

actionSheet:didDismissWithButtonIndex:This method is invoked after the animation ends and the view is hidden (Apple Docs 당)으로 내 문제를 해결할 것으로 보입니다. 아직도 운이 없다!

앞에 전에이 하위보기를 표시하는 방법에 대한 생각은 모두 완료되었습니다.

답변

3

동일한 방법 (actionSheet : didDismissButtonIndex :)에서 하위보기를 추가 및 제거하는 것처럼 보입니다. 이것은 작업이 주 실행 루프의 동일한 사이클에서 수행됨을 의미합니다. 뷰 렌더링은 작업이 끝날 때만 수행되므로 "addSubview"가 "removeFromSuperview"에 의해 무시되어 뷰가 전혀 렌더링되지 않습니다.

조치 시트가 닫히기 전에 호출 된 대리자 메소드에서 "addSubview"를 수행하고 버튼을 클릭 한 후 조치 시트가 호출 된 후 위임 메소드에서 "removeFromSuperview"를 호출하십시오. 기각되었다 : 당신은 추가/제거 작업은 작업 시트 해고 애니메이션 시간 제한으로 단지 깜박이보기를 볼 수 있습니다이 예에서는


-(void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex { 
    [self.view addSubview:self.subviewToAdd]; 
    self.subviewToAdd.center=CGPointMake(160,100); 
} 

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    [self.subviewToAdd removeFromSuperview]; 
} 

. actionSheet : didDismissWithButtonIndex를 변경하여 시간이 지나면 제거하도록 설정할 수 있습니다.이 방법으로 작은 지연을 추가하십시오.

 
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    [self.subviewToAdd performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.0]; 
    //[self.subviewToAdd removeFromSuperview]; 
} 

+0

감사합니다! 본질적으로 당신은 그것이 같은 실행 루프에서 모두 일어나고 있다고 설명 했으므로 이제는 서로를 취소한다고 생각합니다. 귀하의 의견을 감사하십시오. –