문제

나는 그렇게 복잡하지 말아야 할 일을하려고 노력하고 있지만, 나는 그것을 알아낼 수 없습니다. UIviewController가 UitableView를 표시합니다. 사용자가 행을 누를 때 상황에 맞는 메뉴를 제시하고 싶습니다. 나는 이것이 레이블과 버튼이있는 반 투과성보기가되기를 원합니다. AlertView를 사용할 수 있지만 레이블과 버튼 형식의 전체 제어를 원하며 인터페이스 빌더를 사용하고 싶습니다.

그래서 작은보기 250x290을 만들고 알파를 .75로 설정하고 다른 사용자 이벤트를 처리 할 수있는 콘센트가있는 뷰 컨트롤러를 만듭니다.

이제 나는 그것을 제시하고 싶습니다. PRESSESTMODALVIEWCONTROLLER 2 (원하지 않는) 일이 발생하는 경우 1) 뷰는 모든 화면 (그러나 상태 표시 줄)을 다룹니다. 2) 반투명하지만, 내가 본 것은 부모의 모습이 아니라 응용 프로그램이 틀에 띄는 것으로 보인다.

나는 그것을 하위 뷰로 추가하려고 시도했지만 아무 일도 일어나지 않으므로 옳은 일을하지 않습니다.

RestaurantContextVC* modalViewController = [[[RestaurantContextVC alloc] initWithNibName:@"RestaurantContextView" bundle:nil] autorelease];
[self.view addSubview:modalViewController.view];

내가 원하는 것을 할 수 있습니까? 미리 감사드립니다.

곤도

도움이 되었습니까?

해결책

나는 비슷한 것을 코딩하고 있습니다. 내 접근 방식은 .....

  1. DismissModalViewControllerAnimated 및 PresentModalViewController : Animated를 사용하지 않습니다.

  2. IB에서 맞춤형 전체 크기의보기를 설계하십시오. ViewDidload 메시지 본문에서 배경색을 ClearColor로 설정하여 컨트롤러로 덮지 않은 뷰의 공간이 투명합니다.

  3. 플로팅 뷰의 컨트롤러 아래에 uiimageview를 넣었습니다. uiimageview에는 포토샵 이미지가 포함되어 있으며, 코너가 둥글고 배경은 투명하게 설정됩니다. 이 이미지보기는 컨테이너 역할을합니다.

  4. 나는 CoreAnimation을 사용하여 모달보기 스타일로 떠 다니는보기를 제시/해제합니다. (FloatingViewController.m)

    -  (void)viewDidLoad
    {
        [super viewDidLoad];
        [self.view setBackgroundColor:[UIColor clearColor]];
    
        [UIView beginAnimations:nil context:nil];
        [self.view setFrame:CGRectMake(0, 480, 320, 480)];
    
        [UIView setAnimationDuration:0.75f];
        [self.view setFrame:CGRectMake(0, 0, 320, 480)];
        [UIView commitAnimations];
    }
    

다른 팁

Wangii

그게 내가 찾은 해결책입니다. LoadNibnamed로보기를로드 한 다음 다음과 같이 AddSubview로 맨 위에 추가합니다.

//Show a view on top of current view with a wait indicator. This prevents all user interactions.
-(void) showWaitView{
    NSArray* nibViews =  [[NSBundle mainBundle] loadNibNamed:@"WaitView" owner:self options:nil];
#ifdef __IPHONE_2_1
    waitView = [ nibViews objectAtIndex: 0];
#else
    waitView = [ nibViews objectAtIndex: 1];
#endif          
    CGFloat x = self.view.center.x - (waitView.frame.size.width / 2);
    CGFloat y = self.view.center.y - (waitView.frame.size.height / 2);
    [waitView setFrame:CGRectMake(x,y,waitView.bounds.size.width,waitView.bounds.size.height)];
    [self.view addSubview:waitView];    
}

3과 4 포인트에 대해 자세히 설명해 주시겠습니까?

내가 둥근 직장 측면을보기 위해 한 일은 둥근 직장 버튼 안에 넣는 것입니다.

이 코드를 사용하면 실제로 작은 부유 식 뷰를 가질 수 있지만, 부모보다보기가 작 으면 사용자가 부모의 눈에 보이는 부분과 상호 작용할 수 있습니다.

결국 나는 같은 크기의보기를 만들지 만 대비로 코드를 유지했습니다.

곤도

내비게이션 컨트롤러를 사용하여 오버레이 대신 서브 뷰에서 슬라이드하는 것을 강력히 고려합니다. 이것은 예상되는 모델이며 자신의 방식으로 수행함으로써 얻을 수 있다고 생각할 수있는 작은 이점은 (최소한)의 원칙에 따라 크게 상쇄 될 것입니다.

당신이 정말로 이런 식으로 그렇게해야한다면, 나는 뷰 컨트롤러가 유지하는 투명한 "홀딩"보기의 하위보기로 첫 번째 테이블보기를 추가하는 것이 속임수라고 생각합니다. 그런 다음 새 하위보기를 다른 서브 뷰로 추가하십시오.

다시 말하지만,이 팝업은 본질적으로 모달이기 때문에 투명한 "고정"보기를 추가하는 대신이 작업을 실제로 원한다면 창의 직접 하위 뷰로 만들 것입니다.

배경에 대한 접촉을 방지하고 팝업의 초점 입력을 방지하기 위해 투명한 검은 색 방패를 넣고 싶을 수도 있습니다.

그러나 진지하게, 스택에 컨트롤러를 팝업하거나 해당 경고보기를 사용하는 것을 고려하십시오. $$ 디자이너를 고용하지 않았다면 iPhone에서 적절하게 보이지 않을 것입니다.

내가 한 일은 앱 대의원에서 Uinavigation 컨트롤러 위에 UiviewController를 만드는 것이었고 편의를 위해 싱글 톤 객체의 속성으로 만들었습니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

//--- create root navigation controller
self.window.rootViewController = self.navigationController;

//--- create view controller for popups:
popupViewController = [[BaseViewController alloc] init];
popupViewController.view.backgroundColor = [UIColor clearColor];
popupViewController.view.hidden = true; //for rendering optimisation
[self.window addSubview:popupViewController.view];
[AppState sharedInstance].popupViewController = self.popupViewController;

//--- make all visible:
[self.window makeKeyAndVisible];

return YES;

}

내 앱의 어느 시점에서나 전화를 걸 수 있습니다.

MyViewController * myVC = [[UIViewController alloc] init];
//... set up viewcontroller and its view...
// add the view of the created view controller to the popup view:
[AppState sharedInstance].popupViewController.view.hidden = false;
[[AppState sharedInstance].popupViewController.view addSubview:myVC.view];

맨 위에 사용 된 BaseViewController는 UIViewController에서 나와 전체 화면보기를 설정합니다.

//----- in BaseViewController implementation
- (void)loadView {
   //------- create root view:
   CGRect frame = [[AppState sharedInstance] getScreenFrame]; 
   rootView = [[VCView alloc] initWithFrame:frame];
   rootView.backgroundColor = [UIColor whiteColor];
   self.view = rootView;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top