Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图
Posted
技术标签:
【中文标题】Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图【英文标题】:Xcode 5 - iOS - How to Create a View Controller in Xcode without Storyboard or XIB and how to configure it into AppDelegate as the root view 【发布时间】:2014-05-21 20:52:53 【问题描述】:是的,我已经从 ios 开发人员那里休息了一段时间,我又回到了混合状态,但遇到了以下问题:
我想以编程方式创建一个带有嵌入式 UIWebView 的视图控制器,不依赖任何 xib 或情节提要,但我不记得如何让 AppDelegate 显示我的视图控制器。
在所有文档下我能找到的只是将以下内容放在我的 AppDelegate 下
self.window = [[ViewController alloc] initWithNibName:@"blah" bundle: nil];
但由于我没有任何与我的 ViewController 文件关联的 xib,这将是无用的。
有人可以让我回到正确的道路上。
谢谢
【问题讨论】:
完全没有魔法。您只需定义您的自定义 VC 并让它的loadView
方法创建所有将由 XIB 定义的组件。然后viewDidLoad
应该适当地调整组件的大小和位置。通常这比在 XIB 不能很好代表的情况下使用 XIB 更简单。
【参考方案1】:
在AppDelegate.m
:
CustomViewController *rootViewController = [CustomViewController new];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
在CustomViewController.m
覆盖:
- (void)loadView
//Configure your view
self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//other stuff
[self.view setBackgroundColor:[UIColor redColor]];
UIButton *button = /* alloc init etc. */
[self.view addSubview:button];
【讨论】:
感谢您的建议,我得到的只是黑屏(控制台中没有错误)我认为添加我的代码集可能会有所帮助,给我一个莫... 在 AppDelegate.m 下:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ViewController *rootViewController = [ViewController new]; self.window.rootViewController = rootViewController; [window makeKeyAndVisible]; return YES;
ViewController.m 下:-(void)loadView [super viewDidLoad]; self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]]; [self.view addSubview:webView];
对格式问题表示歉意,自从我上 SO 以来已经有一段时间了
伙计..您必须配置视图...正常..您是否编写了所有正确的代码?查看我更新的答案..例如,现在我将红色设置为背景..现在你看到你的观点了吗? ;)【参考方案2】:
类 ViewController: UIViewController, UIPageViewControllerDataSource, CLLocationManagerDelegate,UITextFieldDelegate, UITableViewDataSource,UITableViewDelegate //创建一个位置管理器 让 locationManager = CLLocationManager()
//menu button
@IBOutlet weak var menu: UIBarButtonItem!
@IBOutlet weak var locationTextField: UITextField!
didSet
locationTextField.delegate = self
locationTextField.text = ""
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return globalSearchText.searchArrayLocation.count
func tableView(tableView: UITableView, performAction action: Selector, forRowAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?)
locationTextField.text = globalSearchText.searchArrayLocation[indexPath.row]
【讨论】:
以上是关于Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图的主要内容,如果未能解决你的问题,请参考以下文章
在没有 XCODE 5 的运行 iOS7 的设备上测试 iOS 6 应用程序