Tag: iboutlet

iOS loadNibName混淆,什么是最佳做法?

我熟悉为我自己的UIView子类创buildXIB的大部分过程,但并不是所有事情都适合我,主要是与IBOutlets连接起来。 我可以让他们看起来像一个迂回的方式工作。 我的设置是这样的: 我有MyClass.h和MyClass.m。 他们有一个UIView(称为视图)和一个UILabel(称为myLabel)的IBOutlets。 我添加了“视图”属性,因为在线上的一些示例似乎表明你需要这个,它实际上解决了一个问题,因为它无法find视图属性,我猜甚至在UIView父类。 我有一个名为MyClass.xib的XIB文件,它的文件所有者自定义类是MyClass,它在我的.h和.m文件存在之后正确预先填充。 我的init方法是我有问题的地方。 我尝试使用NSBundle的mainBundle的“loadNibNamed”方法,并将所有者设置为“自我”,希望我会创build视图的实例,它会自动得到它的出口匹配到我的课(我知道如何做到这一点,我很小心)。 然后我想我想让自己等于那个笔尖的索引0处的子视图,而不是这样做 self = [super init]; 或类似的东西。 我觉得我在这里做错了,但在线示例在init方法中有类似的事情,但他们将该子视图0分配给视图属性,并添加它作为一个孩子 – 但是那不是总共两个MyClass实例? 一个基本上与IBOutlets无关,包含通过loadNibNamed实例化的子MyClass? 或者至多,是不是一个MyClass实例与一个额外的中介UIView包含我最初希望作为MyClass的直接子项目的所有IBOutlets? 当涉及到像instanceOfMyClass.frame.size.width这样的事情时,这会带来一些烦恼,因为它会返回0,当引入的子UIView返回我正在寻找的实际框架大小。 是我做错了,我搞乱loadNibNamed在init方法内? 我应该做更像这样的事情吗? MyClass *instance = [[MyClass alloc] init]; [[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil]; 或者像这样? MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0]; 预先感谢任何帮助。

检测用UIButton数组按下哪个button

我有一个像这样的UIButton数组: @property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *btn_Impact_Collection; 我有这个function: – (IBAction)impactAction:(id)sender; 在XIB文件中,我有九个button,每个button都通过引用出口集合连接到btn_Impact_Collection数组。 此外,每个button的Touch_inside属性连接到函数ImpactAction。 现在,当点击一个button时,ImpactAction函数被调用,但是在这个函数里面,我怎么知道哪个button被按下? 在此先感谢您的答案!

我所有的IBOutlet都是在viewDidLoad中

我创build了一个我们可以调用MyViewController1的UIViewController 。 当我调用MyViewController1 ,我所有的IBOutlet在viewDidLoad (以及其他代码中)都是零 。 当我通过做这个控制器 MyViewController1 *vc = [[MyViewController1 alloc] init] , 如果我replaceMyViewController1另一个,例如MyViewController2 ,它的工作原理。 所以我想这个问题真的在MyViewController1 。 最后一件你可能想知道的事情是, MyViewController1实际上是MySuperViewController1一个子类,它是一个UIViewController 。 谢谢你的帮助 ! 编辑 我意识到我的情况可能更复杂。 这是我的确切文件: // MySuperViewController1 MySuperViewController1.h MySuperViewController1.m MySuperViewController1.xib // MyViewController1 MyViewController1.h MyViewController1.m 所以笔尖属于超类,而不是子类。 我可以这样做吗?

awakeFromNib,网点和故事板:是文件错误?

根据NSObjectUIKit Additions Reference ,outletvariables应该在awakeFromNib被调用的时候设置(强调全部是我的): nib加载基础结构将一个awakeFromNib消息发送到从nib存档重新创build的每个对象,但仅在存档中的所有对象都已加载并初始化之后。 当一个对象收到一个awakeFromNib消息时,保证所有的出口和动作连接已经build立。 … 重要说明:由于无法保证从存档中实例化对象的顺序,因此您的初始化方法不应将消息发送到层次结构中的其他对象。 到其他对象的消息可以从awakeFromNib方法中安全地发送。 通常情况下,您需要为需要额外设置的对象实现awakeFromNib,而这在devise时是无法完成的。 例如,您可以使用此方法自定义任何控件的默认configuration,以匹配用户首选项或其他控件中的值。 您也可以使用它将个别控件恢复到应用程序的某个以前的状态。 但是,这不符合我的testing,至less使用故事板。 下面的testing结果似乎与文档相矛盾: 在Xcode中创build一个新的单一视图应用程序。 将第二个ViewController拖到故事板上。 给第一个ViewController一个button,并从显示第二个ViewController的button创build一个模式的segue。 为第二个ViewController创build一个ViewController类文件。 在故事板上的第二个ViewController上创build一个标签,并从它创build一个名为someLabel的出口到相应的ViewController类。 将下面的awakeFromNib实现添加到第二个ViewController中: 。 – (void) awakeFromNib { [super awakeFromNib]; if (self.someLabel == nil) { NSLog(@"someLabel property is nil"); } else { NSLog(@"someLabel property is not nil"); } if (_someLabel == nil) { NSLog(@"_someLabel is nil"); } else […]

(Swift)PrepareForSegue:致命错误:意外地发现零,同时展开一个可选值

DetailViewController: @IBOutlet var selectedBundesland: UILabel! TableViewController: override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { if (segue.identifier == "BackToCalculator") { var vc:FirstViewController = segue.destinationViewController as FirstViewController vc.selectedBundesland.text = "Test" } IBOutlet已连接! 错误:致命错误:意外地发现零,而解包一个可选的值 我阅读了关于Optionals的多个页面,但是我不知道我的问题的答案。 你需要更多关于我的项目的信息吗?

UIAlertView添加到应用程序时崩溃

我试图将一个基本的UIAlertView插入我的应用程序(我正在使用故事板)。 但是当我运行我的应用程序,它停在应用程序的加载屏幕后,进入debugging器屏幕。 我的.h: #import <UIKit/UIKit.h> @interface MindTripAnim :UIViewController { IBOutlet UIImageView *animation; } – (IBAction)showMessage:(id)sender; @end 和我的.m: #import "MindTripAnim.h" @interface MindTripAnim () @end @implementation MindTripAnim – (void)viewDidLoad { animation.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"trips1.png"], [UIImage imageNamed:@"trips2.png"], [UIImage imageNamed:@"trips3.png"], [UIImage imageNamed:@"trips4.png"], [UIImage imageNamed:@"trips5.png"], [UIImage imageNamed:@"trips6.png"],nil]; [animation setAnimationRepeatCount:0]; animation.animationDuration = 0.65; [animation startAnimating]; } – (void)didReceiveMemoryWarning { […]

Swift把多个IBOutlets放在一个数组中

我做了这些(用红色边框标记)IBOutlets使用ctrl + drag 但我不喜欢有9次完全相同的线(干) 我如何把这些IBOutlets放在一个数组中?

如何从另一个class级访问IBOutlet

我想知道如何访问另一个类中声明的@IBOutlet 例如,我有一个名为myfirstview的类 class MyFirstView: UIViewController { @IBOutlet var lblred: UILabel! = UILabel() } 我想从另一个.swift文件中另一个名为MySecondView类中更改lblred的文本: class MySecondView: UIViewController { func modify() { let mfv = MyFirstView() mfv.lblred.text = "Hello" } } 但没有任何反应。 我连接了一个故事板标签lblred 。 我在网上search了很多关于这方面的信息,但找不到能解决我的问题的方法。 请帮我解决这个问题。 谢谢。