我在做一些非常简单的事情上遇到了很多麻烦.我有一个viewController和一个subViewController,两者都有从nib加载的视图.为了澄清,父视图的大小为1024 x 748,而子视图中的subView为640 x 480.
在viewController的viewDidLoad中,我添加了subViewController的视图,如下所示:
[self.view addSubview:self.subViewController.view];
NSLog(@"subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame));
Run Code Online (Sandbox Code Playgroud)
日志输出:
subview.frame:{{0, 0}, {640, 480}}
Run Code Online (Sandbox Code Playgroud)
然后,为了测试一下,我使用setCenter尝试在同一位置重新定位父视图中的子视图,如下所示:
CGPoint newCenter = CGPointMake(0,0); //should stay at the same position..
[self.subViewController.view setCenter:newCenter];
NSLog(@"after changing center.subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame));
Run Code Online (Sandbox Code Playgroud)
日志输出:
after changing center. subview.frame:{{-320, -240}, {640, 480}}
Run Code Online (Sandbox Code Playgroud)
现在我感觉有些东西可能会被搞砸了,并且猜测它与弹簧和支柱/尺寸和位置选项有关.我只能猜到这是因为这是我对IB的最不了解的功能.
关于什么可能导致这个问题的任何其他想法?你们有没有关于如何在IB中设置viewcontrollers视图的一般提示,以便它们自动定位与其他viewcontrollers的视图一致?在设置之后,setCenter是动态移动它们的正确方法吗?
对某些人来说这听起来像是一个愚蠢的问题.我四处搜索,发现很少,主要是因为我找不到合适的搜索词.
这里我想做的是:
该应用程序从视图A开始.
视图A启动视图B,视图B启动视图C.
它们是视图C直接返回A的方式,而不会自行消除并因此暴露B.例如主菜单按钮.
我怀疑这是一个非常简单的答案,或者我完全走错了路.我需要能够从App Delegate或其他视图控制器在视图控制器中设置变量和访问字段等.
以前我可以通过在'didFinishLaunchingWithOptions'中执行以下操作,从App Delegate到我的第一个视图控制器:
viewController =(ViewController*)self.window.rootViewController;
之后我可以通过正常的[viewController someMethod];来从App Delegate访问视图控制器中的方法.
如果我有多个视图控制器(目前有3个),我如何从其他位置访问其他视图控制器?顺便说一句,我已经找到了一些解释,但所有人都在讨论nib/xibs与代码的结合.我没有它们,我有一个故事板和代码(我是app dev的新手).
谢谢!
我尝试了2种方法连续解雇2个视图控制器,但只有一个被解雇而不是第二个
方法1
-(void) LoginDone:(NSNotification *)notif
{
[self dismissViewControllerAnimated:YES completion:NULL]; //previous viewcontroller
[self dismissViewControllerAnimated:YES completion:NULL]; //current viewcontroller
}
Run Code Online (Sandbox Code Playgroud)
方法2
-(void) LoginDone:(NSNotification *)notif
{
[self dismissViewControllerAnimated:YES completion:NULL];
[[NSNotificationCenter defaultCenter] postNotificationName:@"LoginDone2" object:nil];
}
-(void) LoginDone2:(NSNotification *)notif
{
[self dismissViewControllerAnimated:YES completion:NULL];
}
Run Code Online (Sandbox Code Playgroud)
我需要找到一种方法来连续解除之前的viewcontroller和当前的viewcontroller.
我正在学习如何使用故事板进行iOS开发,我似乎无法弄清楚如何在同一屏幕上管理多个视图.
我希望能够控制在同一屏幕上的多个元素,例如UITableView与UIImageView旁边.
这意味着我需要3,1 UIViewControllers为UITableView1,1 UIImageView为主视图,1 为主视图.但据我所知,故事板只允许每个视图层次结构屏幕有1个控制器.谁能告诉我我错过了什么?
任何人都可以指出任何关于如何将项目放置在视图控制器中的指导/文档,该控制器将显示为弹出窗口,以便使用自动布局正确定位组件?
具体来说:我正在Xcode 8.3中使用新的"Present as Popover"segue和新的"通用"故事板.我添加了一个视图控制器,然后一个popover segue到该视图控制器.当它显示时,我看到视图控制器的大致左上象限显示为弹出窗口,但是我看不到任何自动布局,以适应略有不同大小的iPad弹出窗口vs不同大小的iPhone上的"全屏"行为 - 实际上,根据设备的不同,视图控制器的部分略有不同.
我认为这并不是事情应该如何运作,而普遍的popover segue的整体存在理由是通过汽车布局适当地适应popover尺寸?那么,任何人都可以了解我做错了什么或弹出窗口应该如何工作在自动布局?
我有一个 NSTimer(),它从单击按钮开始。如果我希望timer显示在标签上,我可以在同一个视图控制器中执行此操作,但我希望计时器继续运行并且值 (1...2...3) 显示在下一个视图中控制器。我有一个在下一个视图控制器上显示时间变量的标签,但它只在按下按钮时显示时间变量的值,并且不会继续。时间变量被传递,但运行它的函数不是。我该怎么做呢?
var timer = NSTimer()
var time = 0
Run Code Online (Sandbox Code Playgroud)
内部 viewDidLoad :
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("timerFunc"), userInfo: nil, repeats: true)
func timerFunc() {
time++
//time label displays the time (1..2...3 etc)
timeLabel.text = String(time)
}
Run Code Online (Sandbox Code Playgroud)
SecondSceneViewController 有一个从这个视图控制器传递的时间变量:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var secondScene = segue.destinationViewController as!
SecondViewController
secondScene.time = time
}
Run Code Online (Sandbox Code Playgroud)
当我转到 secondViewController 时,时间变量内的值是按下按钮时时间变量的值,它不会继续运行。我将如何将计时器传递给下一个视图控制器以显示值?
我正在尝试将谷歌登录集成到我的 IOS APP(使用 Swift)中,但每次运行它时,我都会得到以下信息warning/error:
[10061:521185] 警告:尝试在 SFSafariViewController 上显示 UITabBarController:0x7db35400:0x7b60a2a0,其视图不在窗口层次结构中!
有谁知道如何解决这个问题?它尚未加载 Safari 控制器视图的原因是什么?
非常感谢您。
亲切的问候
如何检索View/ Fragmenta sap.ui.core.Control属于?
BR克里斯
我知道如何在swift中创建单例类.创建单例类的最佳和最简单的方法如下:
class Singleton {
static let sharedInstance = Singleton()
}
Run Code Online (Sandbox Code Playgroud)
但我不需要任何普通班级的单身人士.我需要为viewcontroller类创建单例.所以我正在使用这个代码创建单例
class AViewController:UIViewController {
static let sharedInstance = AViewController()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
Run Code Online (Sandbox Code Playgroud)
它给我附近的错误 AViewController()
Missing argument for parameter 'coder' in call
Run Code Online (Sandbox Code Playgroud)
看起来它想要我初始化init(coder: NSCoder).但是我应该通过什么参数或值coder呢?
viewcontroller ×10
ios ×8
swift ×3
objective-c ×2
autolayout ×1
controls ×1
nstimer ×1
popover ×1
root ×1
sap-fiori ×1
sapui5 ×1
segue ×1
singleton ×1
view ×1
xcode ×1