我有根视图,它提供了带有内容控制器的导航控制器,它的外观如下:

NavigationController以模态方式呈现,ProjectTypeSelectionView是其根控制器.当点击注销按钮时,我想解除模态视图并返回到LoginScreenViewController.
所以我在prepareSegue LoginScreen中设置为委托:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UINavigationController *destination = segue.destinationViewController;
if ([[destination ] respondsToSelector:@selector(setDelegate:)]) {
NSLog(@"%@", destination);
[destination setValue:self forKey:@"delegate"];
}
}
Run Code Online (Sandbox Code Playgroud)
然后在ProjectTypeViewController中添加此方法:
- (IBAction)logout:(id)sender {
[self.delegate projectTypeSelectionViewControllerDidFinish];
}
Run Code Online (Sandbox Code Playgroud)
点击注销按钮时调用.令我惊讶的是,这并没有解雇控制器.没有任何事情发生,即使你的一切都是连通的.
我已经跟踪了错误 - 当prepareSegue被调用时,NavigationController的delagate被设置为LoginScreenViewController,将ProjectTypeController的委托设置为LoginScreenViewController的插件.
我该如何正确解决这个问题?
iphone uinavigationcontroller presentmodalviewcontroller uistoryboard
在XCode iPad应用程序中,我使用带有视图的故事板和内部的UIImageView,在Interface Builder中定义.如果我尝试使用SetFrame命令[myImageView setFrame:CgRectMake ...]更改UIImageView的位置,则图像不会更改屏幕上的位置.setFrame命令是否足够?谢谢.
我按照一些教程在应用程序启动期间创建一个打开的门动画,但它正在调用
xib文件,我想调用storyboard,我没有足够的经验.这是我的代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[OpenDoorsViewController alloc] initWithNibName:@"OpenDoorsViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud) 嗨,我有一个基于xib的项目,然后我添加了故事板"main.storyboard".但它仍然运行与初始屏幕替代故事板相同的xib.
2013-12-18 16:44:14.376 AePubReader[1882:60b] NSMainNibFile and UIMainStoryboardFile are both set. NSMainNibFile ignored.
2013-12-18 16:44:14.396 AePubReader[1882:60b] There is no app delegate set. An app delegate class must be specified to use a main storyboard file.
Run Code Online (Sandbox Code Playgroud)
以下图片确保我已将故事板作为起始屏幕.
我的旧app app for xib文件,现在我从这里替换xib uiviewcontroller类并把我的新storyboard viewcontroller类名
.h文件
#import <UIKit/UIKit.h>
@class viewViewController;
@interface AePubReaderAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
viewViewController *detailViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet viewViewController *detailViewController;
@end
Run Code Online (Sandbox Code Playgroud)
.m文件
#import "AePubReaderAppDelegate.h"
#import "ViewController.h"
@implementation AePubReaderAppDelegate
@synthesize window, detailViewController; …Run Code Online (Sandbox Code Playgroud) 我正在根据底部的tabBar菜单制作应用程序.初始视图是一个带有按钮,文本字段,标签等的简单视图.第二个选项卡/视图是一个tableView,当应用程序启动时,将从appDelegate中的服务器检索单元格的数据.但是如果用户在下载数据之前按下第二个选项卡,那么tableView为空.
如何确保用户在下载tableView数据之前无法按下第二个选项卡?或者我必须用微调器或类似的东西显示临时视图?
请注意我使用的是故事板.
我在测试我的应用时遇到了问题.您可以在下图中看到我如何设置我的视图:

问题是一切正常.我用我的测试用户登录,以下代码执行loginSegue,
self.performSegueWithIdentifier("loginSegue", sender: self)
Run Code Online (Sandbox Code Playgroud)
这是一个模态segue,它将我的登录"View Controller"与"Home Tab Bar View Controller"相关联.我被重定向到"初始Feed视图控制器".一切都很好.但是当我转到我的"设置视图控制器",然后单击"注销"按钮,其中包含以下代码(IBAction):
@IBAction func logoutAction(sender: AnyObject) {
PFUser.logOut()
self.performSegueWithIdentifier("logoutSegue", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序崩溃了.我的Logout按钮的动作有一个segue,它会将你带回登录"View Controller",但会先将用户记录下来(顺便说一下,我正在使用Parse).这个"推"segue称为logoutSegue.我试图将segue改为"Popover"segue.这解决了问题,有点,因为这样做会弄乱我的"注册视图控制器",因为在登录"视图控制器"时,我点击"注册"按钮,应用程序无论如何都会崩溃.
编译器告诉我,以下代码行是导致错误的代码:
self.performSegueWithIdentifier("logoutSegue", sender: self)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样.我想它与我的"导航控制器"和"主页标签栏视图控制器"设置有关.或者与代表一起?
你能帮我解决这个问题吗?如果你有Objective-C方法没关系,请随意提出一个解决方案,我可以尝试将它从Objective-C转换为Swift.
除了帮助我解决问题之外,我想知道你是否知道Segue类型(Push,Modal,Popover,Replace)之间的区别是什么,以及何时应该使用它们.我阅读了Apple的文档,但我仍然完全不理解它.
提前感谢您的建议和回复.
objective-c uinavigationcontroller uistoryboard uistoryboardsegue swift
我想弄清楚如何根据宽度在故事板上设置UIimage的高度?我需要它是基于宽度的比率.所以图像是全宽的.
目前我正在使用通用故事板,并希望图像为3:4,因此高度需要比宽度大33%.
我不明白的是通用故事板上的宽度是600,那么我怎么得到高度比宽度大33%的比例?
我无法弄清楚如何做到这一点.
我在故事板中偶然发现了一个有趣的问题.我正在使用约束.我想将视图高度设置为等于另一个视图的宽度.高度和宽度本身不是使用约束设置的,将根据屏幕大小在运行时设置.这可以在故事板中完成吗?
我有3个MVC,在这里命名为A,B,C.
A是主MVC,按钮"Menu"通过popover segue连接到B.
A还连接到C,手动显示segue.
B是一个弹出窗口MVC,按钮"Detail"连接到A,带有展开segue.
C是具有详细信息的细节MVC.
在A.的展开函数内部,我调用performSegueWithIdentifier来显示C.
预期的行为是
但运行我得到的应用程序.
C突然出现并消失,这不是我想要的.
一些额外的信息
我想在单击表格单元格后从嵌入在导航控制器中的表格视图选择到另一个视图控制器。我仍然希望将第二个视图控制器嵌入到同一导航控制器中。因此,我通过情节提要创建了segue。
但是,我想在点击单元格后有条件地检查是否应该执行segue。
我已经签出了shouldPerformSegueWithIdentifier满足我需要的方法,但是不幸的是,它在表单击处理程序之前执行。如果我删除情节提要segue并仅通过进行segue performSegue,则我的第二个视图控制器不再嵌入相同的导航控制器中。
有什么建议吗?
这是我的代码:
// Called on click event on table cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let app = apps[indexPath.section]
if app.state == .INSTALLED {
let inputVC = self.navigationController?.viewControllers[1] as? InputVC
inputVC?.app = app
performSegue(withIdentifier: "showAccSync", sender: self)
} else {
// show alert
}
}
Run Code Online (Sandbox Code Playgroud) uistoryboard ×10
ios ×8
autolayout ×2
iphone ×2
objective-c ×2
segue ×2
swift ×2
xcode ×2
constraints ×1
nib ×1
uiimageview ×1