gpt4 book ai didi

ios - 使用自定义 AlertView - 窗口层次结构?

转载 作者:行者123 更新时间:2023-11-29 01:54:41 25 4
gpt4 key购买 nike

所以我一直在构建一个应用程序,它使用我在 another question 中找到的自定义 AlertView .

完整代码可以在 Github 上找到.

具体来说,可以找到CustomiOSAlertView.m HERE .

这就是我创建 View 的方式,我调用 以显示附加到 UIStoryboard 中的 UIImage 的 IBAction 的警报,这是操作:

- (IBAction)Button1:(id)sender {
NSString *name = @"info";
NSString *content = @"info 2";
NSString *info = @"more info";
NSString *imageLink = @"image.png";

NSString *stringContent = [NSString stringWithFormat:@" %@\n\n %@\n\n %@", name, content, info];
[self ConstructAlertContent:imageLink :stringContent];
}

调用它(使用上面附带的 CustomiOSAlertView.m):

-(void)ConstructAlertContent:(NSString *)imgStr :(NSString *)str{
NSString *imageLink = imgStr;
NSString *stringContent = str;

// Here we need to pass a full frame
CustomIOSAlertView *alertView = [[CustomIOSAlertView alloc] init];

// Add some custom content to the alert view with above method createDemoView()
[alertView setContainerView:[self createDemoView:imageLink : stringContent]];

// Modify the parameters
[alertView setButtonTitles:[NSMutableArray arrayWithObjects:@"Done", nil]];
[alertView setDelegate:self]; //add to .h: <CustomIOSAlertViewDelegate>

// You may use a Block, rather than a delegate.
[alertView setOnButtonTouchUpInside:^(CustomIOSAlertView *alertView, int buttonIndex) {
//NSLog(@"Block: Button at position %d is clicked on alertView %d.", buttonIndex, (int)[alertView tag]);
[alertView close];
}];

//allow alert to move with phone motion
[alertView setUseMotionEffects:true];

//set alert alpha to slightly transparent
[alertView setAlpha:0.94];

// And launch the dialog
[alertView show];
}

然后像这样创建 View :

- (UIView *)createDemoView:(NSString *)imgStr :(NSString *)str
{
UIView *demoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 290, 300)];

//include image
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(70, 10, 150, 180)];
[imageView setImage:[UIImage imageNamed:imgStr]];
[demoView addSubview:imageView];

//... with additional subviews

return demoView;
}

在我创建单独的 UIStoryboard 并在 AppDelegate.m 中使用以下代码为特定设备实例化正确的 Storyboard之前,它一直运行良好:

if (iOSScreenSize.height == 480){ //iPhone 3.5"

//instantiate storyboard for iPhone4S
UIStoryboard *iPhone35Storyboard = [UIStoryboard storyboardWithName:@"iPhone35" bundle:nil];
UIViewController *initialViewcontroller = [iPhone35Storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewcontroller;
[self.window makeKeyAndVisible];
}

if (iOSScreenSize.height == 568){ //iPhone 4"

//instantiate storyboard for iPhone 5S
UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"iPhone4" bundle:nil];
UIViewController *initialViewcontroller = [iPhone4Storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewcontroller;
[self.window makeKeyAndVisible];
}

if (iOSScreenSize.height == 667){ //iPhone 4.7"

//instantiate storyboard for iPhone 6
UIStoryboard *iPhone47Storyboard = [UIStoryboard storyboardWithName:@"iPhone47" bundle:nil];
UIViewController *initialViewcontroller = [iPhone47Storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewcontroller;
[self.window makeKeyAndVisible];
}

if (iOSScreenSize.height == 736){ //iPhone 5.5"

//instantiate storyboard for iPhone 6+
UIStoryboard *iPhone55Storyboard = [UIStoryboard storyboardWithName:@"iPhone55" bundle:nil];
UIViewController *initialViewcontroller = [iPhone55Storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewcontroller;
[self.window makeKeyAndVisible];
}

现在,当我在(模拟器和设备上)测试应用程序时,它会加载正确的 Storyboard和内容,但不会显示自定义 AlertView ......只要我注释掉上面的代码(实例化特定的 Storyboard),然后运行应用程序,自定义 AlertViews 再次工作...

我猜这与 View 层次结构有关?是否可以像我使用上述代码那样通过手动实例化 Storyboard 来使它出现?

编辑

请确保,使用下面 Rob 的回答,您没有在“主界面”的下拉选项卡菜单中选择 Storyboard...将其留空,为我工作,现在从 AppDelegate 和实例化 Storyboard调用时还会在 UIStoryboard 顶部创建一个 AlertView。

Deployment Info - xCode

最佳答案

在我看来,您在实例化 Storyboard之前调用 AppDelegate 中的自定义 View 方法。

您应该先实例化 Storyboard,然后从正确的 Storyboard Controller 中调用方法。

例如:

AppDelegate:

if (iOSScreenSize.height == 667){ //iPhone 4.7"

//instantiate storyboard for iPhone 6
UIStoryboard *iPhone47Storyboard = [UIStoryboard storyboardWithName:@"iPhone47" bundle:nil];
UIViewController *initialViewcontroller = [iPhone47Storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewcontroller;
[self.window makeKeyAndVisible];
}

InitialViewController.m

-(void)viewDidAppear(Bool animated){

[super animated:animated];

[self createDemoView:"myImage.png" str:"Custom Alert"]'

}

编辑:在此处添加示例代码:https://github.com/robcontreras/CustomAlert

关于ios - 使用自定义 AlertView - 窗口层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com