我正在尝试做一些不应该那么复杂的事情,但我无法弄清楚。我有一个 UIViewController 显示 UITableView。我想当用户按一行时显示一个上下文菜单。我希望这是一个带有标签和按钮的半透明视图。我可以使用 AlertView,但我想要完全控制标签和按钮的格式,并且希望使用 Interface Builder。

因此,我创建了 250x290 的小视图,将 alpha 设置为 0.75,并创建一个带有插座的视图控制器来处理不同的用户事件。

现在我想把它呈现出来。如果我使用PresentModalViewController两个(不需要的)事情发生1)视图涵盖所有屏幕(但状态栏)。2)它是半透明的,但我在它“后面”看到的不是父视图,而是应用程序根视图。

我尝试将其添加为子视图,但没有任何反应,所以我没有做正确的事情:

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

可以做我想做的事吗?提前致谢。

贡索

有帮助吗?

解决方案

我正在编码类似的东西。我的方法包括......

  1. 不使用missModalViewControllerAnimated和presentModalViewController:animated。

  2. 在 IB 中设计定制的全尺寸视图。在其viewDidLoad消息体中,将背景颜色设置为clearColor,以便视图上未被控制器覆盖的空间是透明的。

  3. 我将 UIImageView 放在浮动视图的控制器下。UIImageView 包含一个经过 Photoshop 处理的图像,该图像具有圆角且背景设置为透明。该图像视图用作容器。

  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

那几乎溶液I中找到。 我加载视图与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阐述?

我没有什么,得到圆形RECT方面是把它的圆形矩形按钮内部的视图。

此代码实际上将让你有一个小的浮动视图,但如果认为是小,它的母公司,用户可以与母公司的可见部分进行交互。

在结束创建我具有相同大小的视图,但保留了代码,以防万一。

Gonso

我会认真考虑使用导航控制器在你的子视图滑动覆盖它代替。这是预期的模型和任何小的好处,你可能会认为你会做它自己的方式将(至少)惊喜的原则大大抵消得到。

如果你真的真的必须这样做,这样一来,我认为关键是要第一个表视图中添加一个透明的“持有”认为,视图控制器维持的子视图。然后添加新的子视图的另一个子视图。

此外,如果你真的想这样做,而不是添加一个透明的“持有”的观点,因为这个弹出基本上是模态的,我会做它直接一个子视图窗口。

您可能要放在一个透明的黑色挡箭牌,以防止在后台接触并专注于在弹出的输入。

但严重的,可以考虑任出栈上的控制器或者使用警报视图。除非你已经聘请了设计师$$,它可能不会看在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;

}

目前在我的应用程序的任何点,我可以再调用e.g。

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