我对iOS编程完全陌生。到目前为止我只在Android上进行了编程,而Objective-C现在对我来说是一种完全不同的新语言。
我想要做的是不要使用我用故事板创建的设计。我想以编程方式完成所有工作,因为我觉得如果我这样做会更有动力。
我遇到的问题是,我希望有3种不同的观点。我google了一下,偶然发现了一些stackoverflow问题。在那里,人们建议使用NavigationController
。好的。现在我正在尝试实现它。我想要的是以下
MainViewController
有3个不同的观点。第一个视图是loginView。第二个是显示数据,第三个是根据第二个视图的点击显示详细数据。
这是一个导航控制器核心器吗?我遇到的问题是我告诉应用程序我想从MainViewController开始并在其中推送LoginView。
我有MainViewController.h
和MainViewController.m
,它们是UIViewController
现在,我到底在哪里做到这一点?我在这里有didFinishLaunchingWithOptions
方法,其中包含以下内容
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
UIViewController *viewController = [[MainViewController alloc]init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[navigationController pushViewController:viewController animated:NO];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
但这只会让应用程序崩溃。我究竟做错了什么?我如何获得这三种观点?我开始完全错了吗?请帮忙。正如我所说,我是iOS开发的新手。我很容易在一个视图上编程。我已经这样做了,但我想要不同的观点!谢谢!
答案 0 :(得分:2)
MainViewController
有3个不同的观点。第一个视图是loginView。第二个是显示数据,第三个是根据第二个视图的点击显示详细数据。
那是错的。
您需要三个不同的视图控制器,每个视图控制器都将管理自己的视图。
然后在导航控制器中依次推送,具体取决于用户的互动。
答案 1 :(得分:1)
删除它:
[navigationController pushViewController:viewController animated:NO];
你不应该推送ViewController,因为你已经告诉NavigationController已经将ViewController作为根控件:
UINavigationController *navigationController = [[UINavigationController alloc]
initWithRootViewController:viewController];
答案 2 :(得分:1)
使用此代码,如果应用程序是Universe,则使用相同的代码,删除([[UIDevice currentDevice] userInterfaceIdiom]
的条件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UINavigationController *navController;
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
{
if(result.length>0)
{
for(var i in result)
{
var ObjResult=result[i];
var content = "<div data-role='collapsible' id='set" + i + "'>";
content+="<h3>"+ObjResult.title+"<br>";
var intDate=parseInt(ObjResult['ordered date']);
content +=timestampToDate(intDate)+"</h3>"
if(isNaN(ObjResult.med_placeorderfor))
content+="<p><a>Medicle Place order for: </a>"+result[i].med_placeorderfor+"</p>";
if(isNaN(ObjResult.pres_placeorderfor)>0)
content+="<p><a>Medicle Place order for: </a>"+result[i].placeorderfor+"</p>";
if(ObjResult['order status'].length>0)
content+="<p><a>Order status: </a>"+ObjResult['order status']+"</p>";
if(ObjResult.comments.length>0)
content+="<p><a>Comments: </a>"+ObjResult.comments+"</p>";
content+="</div>";
}
$("#id_notification_list_dashboard").append( content ).collapsibleset('refresh');
$("#id_notification_list_dashboard").trigger('create');
}
else
{
$("#id_notification_list_dashboard").append("<div style=\"text-align:center\" data-role='list-divider'><h1>No data found</h1></div>").collapsibleset('refresh');
}
$('body').removeClass('ui-loading');
loadingWithMsg("hide");
}
} else {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
navController=[[UINavigationController alloc]initWithRootViewController:self.viewController];
[navController.navigationBar setTranslucent:YES];
navController.navigationBar.tintColor = [UIColor colorWithRed:161.0f/255.0f green:18.0f/255.0f blue:6.0f/255.0f alpha:1];
self.window.rootViewController =navController ;
[self.window makeKeyAndVisible];
return YES;
}
答案 3 :(得分:1)
是的,Gonzalo Aune是仪式,你不应该在NavicationController中推送rootviewcontroller。 此外,我建议您保留导航控制器的第一个视图(登录视图)。 您可以从MainViewController开始,根据检查和条件,您可以使用
在MainViewController上显示LoginView[self presentViewController:loginViewController animated:YES completion:NULL];
成功登录后,您可以解除LoginViewController。