我正在尝试将数据传递回以前的viewController.
有谁知道如何将数据从ViewController B传递回ViewController A?所以我想要一个字符串'从'BIDAddTypeOfDealViewController转到BIDDCCreateViewController.用户编辑了viewController B,我想在ViewController A中返回已编辑的数据然后我使用它.
我正在使用此答案的"传递数据"部分.我的不同之处:第3点和第6点只是在弹出视图时提及,所以我将该代码放在viewWillDisappear中.我认为这是正确的吗?同样在Point 6,我没有使用nib进行初始化,因为它已经过时了.我正在使用故事板.而且我没有添加最后一行,因为我不相信我会推动它.按我的故事板上的按钮已经让我前进了.
我认为问题可能出现在BIDDCCreateViewController中,我有方法,但我无法运行它.要运行一个方法,它应该[自我方法].我无法做到这一点.那就是我猜的.
它编译并运行良好,没有任何记录,所以我不知道它是否有效.
更新:我无法获得'sendDataToA'方法来执行.
#import <UIKit/UIKit.h>
#import "BIDAddTypeOfDealViewController.h"
@interface BIDDCCreateViewController : UIViewController
@property (strong, nonatomic) NSString *placeId;
- (IBAction)gotoBViewController:(id)sender;
@end
#import "BIDDCCreateViewController.h"
#import "BIDAddTypeOfDealViewController.h"
@implementation BIDDCCreateViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"SUCCESSFULLY PASSED PLACE ID: %@", self.placeId);
}
-(void)sendDataToA:(NSString *)myStringData
{
NSLog(@"Inside sendDataToA");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Your string Data Showing" message:myStringData delegate:self cancelButtonTitle:@"Ok " otherButtonTitles:nil];
[alert show];
}
- (IBAction)gotoBViewController:(id)sender …Run Code Online (Sandbox Code Playgroud) 简而言之:我希望有两个全屏视图,我可以在视图A和视图B之间切换.我知道我可以使用标签栏控制器,但我不想这样做.我想看看这是如何手工完成的,以了解幕后发生的事情.
我有一个充当根控制器的UIViewController:
@interface MyRootController : UIViewController {
IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;
@end
Run Code Online (Sandbox Code Playgroud)
contentView连接到UIView,我将其作为子视图添加到Nib的"视图"中.这有绿色,我看到它全屏.工作良好.
然后,我以几乎相同的方式创建了另外两个View Controller.ViewControllerA和ViewControllerB.ViewControllerA有蓝色背景,ViewControllerB有黑色背景.只是看看哪一个是活跃的.
所以,在myRootController的实现中,我这样做:
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
ViewControllerA *vcA = [[ViewControllerA alloc] initWithNib];
[self.contentView addSubview:vcA.view];
[cvA release];
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,-initWithNib方法如下所示:
- (id)initWithNib { // Load the view nib
if (self = [super initWithNibName:@"ViewA" bundle:nil]) {
// do ivar initialization here, if needed
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
这样可行.当我启动应用程序时,我会看到ViewControllerA中的视图.但现在最大的问题是:View Controller通常具有以下所有方法: …
有没有办法从AppDelegate获取当前视图控制器?我知道有rootViewController,但这不是我想要的.
我有一个自定义的UIView,它有一个专用的,手动设置的纵向和横向框架,因为autoresizingMasks在我的情况下不起作用.
我将此框架设置为:
- (void)viewWillAppear:(BOOL)animated
Run Code Online (Sandbox Code Playgroud)
它按预期工作.
我现在的问题是,我的UIView还有子视图,也有专门的肖像/风景位置.
我将这些子视图放在:
- (void)layoutSubviews
Run Code Online (Sandbox Code Playgroud)
如果我现在离开我在的viewController 如纵向,旋转到另一个的viewController横向的,然后回来这个的viewController我看到我的观点得到了正确的调整,但我的观点的子视图,其中获得定位在layoutSubviews不重新定位还没有,但在视图已经出现后以动画方式调整大小.
我在viewDidAppear中什么也没做,我已经尝试过调用了
- (void)layoutIfNeeded
Run Code Online (Sandbox Code Playgroud)
以及:
- (void)setNeedsLayout
Run Code Online (Sandbox Code Playgroud)
在viewWillAppear中,但它似乎没有任何改变.
我有什么想法我做错了吗?
谢谢.
我无法覆盖我的Storyboard中设计的CustomViewController的初始化方法.
现在我正在做(在我的mainViewController中):
self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"];
self.customViewController.myObject = someObject;
Run Code Online (Sandbox Code Playgroud)
我在viewDidLoad(CustomViewController)
[self.label setText:self.myObject.someString];
Run Code Online (Sandbox Code Playgroud)
这没问题.
但是,这是正确的方法吗?我应该在CustomViewController中添加自定义init方法(或覆盖)吗?像initWithObject:?我不知道如何调用我的自定义init方法UIStoryboard instantiateViewControllerWithIdentifier:,而不是调用init也不是initWithNibName.
也许我应该使用:- (id)initWithCoder:(NSCoder *)decoder.
请给我一些建议!
谢谢!
当键盘显示时,我想提升视野.键盘(高度:216)应该用它的高度向上推动我的视线.这可以通过简单的代码实现吗?
iOS 13为模态呈现的视图控制器引入了modalPresentationStyle .pageSheet(及其兄弟姐妹.formSheet)的新设计…
…我们可以通过向下滑动显示的视图控制器来消除这些页面(交互式消除)。尽管新的“拉动关闭”功能非常有用,但可能并不总是令人满意。
问题:我们如何关闭交互式解雇? -请记住,我们保持演示文稿样式不变。
我正在尝试使用故事板并让事情正常运行.我已经在我现有的一个视图中添加了一个Container View.当我尝试在我的视图控制器.h文件(ctrl-drag)中添加对此的引用时,我得到了一个IBOutlet UIView *containerView.如何获取对容器视图的视图控制器的引用?我需要容器视图控制器,所以我可以将它的委托设置到我的视图控制器,这样他们就可以相互"交谈".
我将故事板设置为:

它在我的.h文件中引用为:

请注意.h中的是UIView,而不是我的视图的InstallViewController.如何添加对视图控制器的引用?我需要能够设置其委托.
我无法将init方法添加到以下UIViewController类.我需要在init方法中编写一些代码.我必须编写init(编码器)方法吗?即使我添加编码器和解码器方法,我仍然会遇到错误.我也尝试使用没有任何参数的init方法,但这似乎也不起作用.
class ViewController: UIViewController {
var tap: UITapGestureRecognizer?
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nil, bundle: nil)
tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
}
...
...
}
Run Code Online (Sandbox Code Playgroud)
如果我调用不带参数的super.init()方法,则错误为"必须调用超类的指定初始化程序",如果我传递参数nib和bundle,则错误为"必需的初始化程序初始化程序(编码器)".
即使我添加init(编码器)和init(解码器)它也不起作用.
我有一个应用程序,它是一个单一的视图应用程序 我有一个导航控制器链接到根视图控制器中的所有子控制器.
在每个子控制器中,我都有一个注销按钮.我想知道我是否可以使用一个可以调用的功能,这将解除所有已经打开的控制器,无论当用户按下注销时哪个控制器当前打开?
我的基本开始:
func tryLogout(){
self.dismissViewControllerAnimated(true, completion: nil)
let navigationController = UINavigationController(rootViewController: UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("LoginViewController") )
self.presentViewController(navigationController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找执行此任务的最有效的内存方式.我将我的注销函数放在一个单独的utils文件中,但是我不能使用self.而且我仍然知道要动态解除哪些控制器的问题.
已建议更新 Pop到根视图控制器.所以我的尝试是这样的:
func tryLogout(ViewController : UIViewController){
print("do something")
dispatch_async(dispatch_get_main_queue(), {
ViewController.navigationController?.popToRootViewControllerAnimated(true)
return
})
}
Run Code Online (Sandbox Code Playgroud)
这是实现我追求目标的最佳途径吗?
uiviewcontroller ×10
ios ×8
iphone ×4
objective-c ×3
uikit ×3
ios5 ×2
swift ×2
dismiss ×1
ios13 ×1
keyboard ×1
uistoryboard ×1
uiview ×1
xcode ×1