我试图将UIToolBar添加到UIWebView中,但每当我在viewDidLoad中插入此代码时UIToolBar都没有显示,但是当在viewWillAppear中完成时,它可以工作.有人可以向我解释一下.
-(void)viewDidLoad
{
[super viewDidLoad];
self.forwardButton = [[UIBarButtonItem alloc]initWithTitle:@"Forward" style:UIBarButtonItemStylePlain target:self action:@selector(forward)];
self.backButton = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back)];
NSArray *buttonsArray = @[self.backButton,self.forwardButton];
CGRect toolBarFrame = CGRectMake(0, self.view.frame.size.height - 44, self.view.frame.size.width, 44);
self.toolbar = [[UIToolbar alloc]initWithFrame:toolBarFrame];
[self.toolbar setItems:buttonsArray animated:YES];
[self.toolbar sizeToFit];
[self.view addSubview:self.toolbar];
}
Run Code Online (Sandbox Code Playgroud) 我有一个自定义的 segue 类型(覆盖 init 并执行 UIStoryboardSegue 的方法),并且在 init 方法中我实例化了目标视图控制器(VC)。在源 VC 的 prepareForSegue 方法中,我调用了目标 VC 的方法,该方法尝试重新加载目标 VC 的 tableView。问题是表视图并不总是被初始化,当我调用表视图的 reloaddata 时,我有时会得到一个零取消引用错误。问题是我如何才能等到 VC 完全初始化而不出现此错误?我正在使用 swift,如果您为 swift 的答案编写任何示例代码,我将不胜感激。
我在我的故事板中定义了一个简单的 UICollectionView(见截图)。
我正在使用自动布局,UICollectionView 附加到超级视图的前导、尾随和顶部以及底部的工具栏。
当我在控制台中显示 viewDidLoad 中 UICollectionView 的大小时:
NSLog(@"%s CollectionView ========== > height:%f width:%f", __PRETTY_FUNCTION__,self.theCollectionView.bounds.size.height, self.theCollectionView.bounds.size.width);
Run Code Online (Sandbox Code Playgroud)
我得到: CollectionView ========== > 框架高度:492.000000 宽度:600.000000
这个尺寸也显示在故事板中(宽度:600 高度:492)。
当我在 viewDidAppear 中运行相同的日志时,我得到: CollectionView ========== > Frame height:663.000000 width:1024.000000
这是我所期望的。我很惊讶只有在 viewDidAppear 中有合适的大小,请你解释一下或者我的故事板有什么问题吗?
谢谢,
塞巴斯蒂安。
我的iPhone应用程序基于一个常见的"实用程序模板",如Apple自己的Weather应用程序.
我点击信息按钮,它会翻转屏幕.我点击完成按钮......然后它翻转.这一部分似乎都运转正常.
我已经在我的FlipSideViewController.m中的4个方法中的每个方法中放置了NSLog()语句
viewDidLoad
viewWillAppear
viewDidUnload
viewWillDisappear
Run Code Online (Sandbox Code Playgroud)
当我翻转我的FlipSide时,我不应该看到调用viewDidLoad和viewDidAppear.当我翻回时看到viewWillDisappear和viewDidUnload?
相反,我从未看到任何viewDidUnload调用.但每次我翻转我的FlipSide时,我都会看到另一个viewDidLoad.那是错的吗?
一次又一次地来回翻转,我会看到:
viewDidLoad
viewWillAppear
viewWillDisappear
viewDidLoad
viewWillAppear
viewWillDisappear
viewDidLoad
viewWillAppear
viewWillDisappear
Run Code Online (Sandbox Code Playgroud)
这是不是意味着视图重新加载了3次......但是卸载了0次?不应该有"匹配"加载/卸载和出现/消失的方法吗?
两个objective-c方法, - (void)viewDidLoad和 - (void)loadView是在执行程序时调用的方法,但它们之间有什么不同?
我的应用程序在启动时检查NSString是否为空,如下所示:
if ([checkfieldstring1 isEqualToString:@""]) {
checkboxButton.hidden = YES;
}
else {
checkboxbutton.hidden = NO;
}
Run Code Online (Sandbox Code Playgroud)
但是,当存在空字符串时,该按钮不会被隐藏.我知道这个方法在我将它作为IBAction挂钩到按钮时有效,但在ViewDidLoad上没有...
好的.如果你有两个viewControllers,你从第一个到第二个进行模态Segue,那么你用[self dismissModalViewControllerAnimated:YES]解雇它; 它似乎没有回忆起viewDidLoad.我有一个主页面(viewController),然后是各种选项页面,我希望在更改选项时更新主页面.当我刚刚做了两个模态分段(一个前进,一个后退)时,这很有用,但这似乎是非结构化的,并且可能导致大型项目中的代码混乱.
我听说过push segues.他们还好吗?
谢谢.我感谢任何帮助:).
我正在使用[CLLocationManager locationServicesEnabled]函数来获取是否启用位置服务的状态.我保留了viewDidLoad方法代码.
if(![CLLocationManager locationServicesEnabled])
{
NSLog(@"No");
}
else
{
NSLog(@"Yes");
}
Run Code Online (Sandbox Code Playgroud)
当我第一次运行这个应用程序时它会返回Yes.为什么?它应该归还我No.当我没有选择"允许"或"不允许"选项时就是这种情况.意味着我既不允许也不允许,但viewDidLoad我得到了Yes.
现在我选择"不允许"并再次加载它viewController.在这个时候,至少它应该归还我No,但我仍然得到了Yes.为什么?
这么多困惑CLLocationManager.
有任何想法吗?
我有一个视图控制器,只显示计算过程中的进度.我把方法调用了
在viewDidLoad但问题是认为只有当计算完成出现!怎么样
视图出现在屏幕上后,我可以自动启动计算吗?
我已经阅读了有关此问题的几篇文章,但都没有解决我的问题。
我正在编写一个应用程序,我必须单击一个按钮(“准备”)以转到以下ViewController。单击该按钮时,它还会在两个视图控制器之间传递数据。
问题是,当我单击按钮时,以下ViewController加载两次。因此,如果我想返回,则必须返回两个相同的ViewController。
我已经检查了segue,类名和文件名,但没有任何修复方法。
我还创建了一个新项目,并从一开始就重写了所有代码,但最后仍然无法正常工作。
但是,我注意到在添加prepare(forSegue :)函数和performSegue函数时出现了问题。没有它,ViewController只会加载一次。但是,当然,没有它我就无法在视图之间传递数据。
这是我的两个视图的屏幕快照以及两个函数的代码:
// Prepare the segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "prepareSegue" {
let timerViewController = segue.destination as! CountdownViewController
timerViewController.timeInterval1 = waitingTime
timerViewController.timeInterval2 = shootingTime
timerViewController.lastSeconds = lastSeconds
timerViewController.currentTimeInterval = waitingTime
}
}
// Prepare the timer when the button is pushed
@IBAction func prepareTimer(_ sender: Any) {
performSegue(withIdentifier: "prepareSegue", sender: self)
}
Run Code Online (Sandbox Code Playgroud) viewdidload ×10
ios ×7
iphone ×5
objective-c ×5
segue ×2
swift ×2
autolayout ×1
ios5 ×1
loadview ×1
mkmapview ×1
nsstring ×1
uiwebview ×1
xcode ×1