代码生成器Accessorizer有一个选项来分配IBOutlets而不是保留它们.例如,比较这两个生成的行:
@property(nonatomic,retain)IBOutlet UIImageView *backgroundView;
@property(nonatomic,assign)IBOutlet UIImageView *backgroundView;
Run Code Online (Sandbox Code Playgroud)
为什么我要分配IBOutlets,同时保留所有其他属性?
我有一个像这样的UIButton数组:
@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *btn_Impact_Collection;
Run Code Online (Sandbox Code Playgroud)
我有这个功能:
- (IBAction)impactAction:(id)sender;
Run Code Online (Sandbox Code Playgroud)
在XIB文件中,我有九个按钮,每个按钮都连接到带有引用插座集合的btn_Impact_Collection数组.此外,每个按钮的Touch_inside属性连接到函数ImpactAction.
现在,当单击一个按钮时,将调用ImpactAction函数,但在此函数内,我如何知道按下了哪个按钮?
在此先感谢您的回答!
在我继承的代码中,我看到了以下内容:
@property (readonly) IBOutlet UIImageView * bgImage;
Run Code Online (Sandbox Code Playgroud)
当我期望保留记忆模型如:
@property (readonly, retain) IBOutlet UIImageView * bgImage;
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么第一个属性定义工作而不会引起问题.
此外,还有一个releasedealloc,如你所料:
-(void)dealloc
{
[_bgImage release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
如果有人能为此提出解释,我将不胜感激.我已经与原始开发人员交谈,他试图编写更简洁的代码,这就是为什么他retain在内存模型中遗漏了(似乎没必要).
我想知道IBOutlet是否基本上被视为ivar IBOutlet语句,因为它只是readonly(没有使用setter,因此默认的assign memory模型没有区别).
如果永远不会期望IBOutlet发生变化,那么使用没有内存模型的readonly属性实际上是定义属性的更好方法吗?
问题
IBOutlet在我有机会使用之前就已发布.
我想要的是
我想从我的app委托访问导航控制器,以便我可以重新加载表视图.
我的设置
我有:
我正在使用ARC,Xcode 4.3.2和iOS5.1
我试过的
码
KPAppDelegate.h
@interface KPAppDelegate : UIResponder <UIApplicationDelegate> {
IBOutlet KPBrowseExpensesNavigationController *nc;
}
@property (strong) IBOutlet KPBrowseExpensesNavigationController *nc;
Run Code Online (Sandbox Code Playgroud)
KPAppDelegate.m
@implementation KPAppDelegate
@synthesize nc;
-(void)setNc:(KPBrowseExpensesNavigationController *)nc_ {
nc = nc_; // This gets called on view load and nc gets set.
}
...snip...
// This is called about 5 seconds after app startup
-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { …Run Code Online (Sandbox Code Playgroud) 我正在尝试从prepareForSegue方法中的第一个VC更新第二个VC中的Label.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
MYSecondViewController* secondVC = (MYSecondViewController*)segue.destinationViewController;
secondVC.titleLabel.text = @"First VC Says: You Are Second!!"; //This doesn't work
secondVC.dataPassString = @"First VC Says: You Are Second!!"; //This works + secondVC viewDidLoad
}
Run Code Online (Sandbox Code Playgroud)
如果我直接更新Label,它就不起作用.如果我更新一个字符串属性,然后将其分配给第二个VC viewDidLoad中的标签,它确实有效.
这是否意味着在prepareForSegue调用后第二个VC viewDidLoad方法尚未被调用?
是否调用了一些init方法(因此NSString对象可以通过)?如果是的话,哪一个?
有没有办法从第一个VC更新第二个VC中的IBOutlets?
我正在UIViewController从一个捆绑中加载一个initWithNibName:bundle:.如果我在其中设置断点,viewDidLoad我可以看到它view已设置.About.xib在Interface Builder中查看时,我也可以看到这一点.
然而,一旦视图实际上第一次使用([self.navigationController pushViewController:viewController animated:YES]根据我的应用程序的逻辑调用)我收到此错误:
*由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"关于"笔尖,但未设置视图插座.
这也是触发的调用viewDidLoad.因此,显然在通话期间,view首先是非零(应该是),后来显然再次变为零.
如果我po [viewController view]在调用之前立即键入调试器,我会收到此错误(可能只是另一个相同症状的表示):
错误:执行被中断,原因:内部ObjC异常断点(-3)..进程已返回到表达式求值之前的状态.
如何在不遇到这些错误的情况下将视图控制器与现有导航栏一起加载和使用?
更新如果我从故事板(不一定是我的主要故事板)而不是从XIB文件加载视图控制器,问题显然会消失.
我想知道哪个地方最适合从故事板放置IBOutlets:
a)在头文件(.h)中
b)在.m文件中创建的类扩展中
谢谢
问候
我确实进行了搜索,发现了很多约定,但没有一个谈论 IBOutlet。
我应该使用以下哪一项?
@IBOutlet weak var price: UITextField!
@IBOutlet weak var priceTextField: UITextField!
@IBOutlet weak var textFieldPrice: UITextField!
@IBOutlet weak var tfPrice: UITextField!
Run Code Online (Sandbox Code Playgroud) 真的需要你的帮助!我已经完成了解决这个问题的所有可能的帖子,但似乎没有任何效果.
所以我使用.xib文件在ProfileFoldingCellView.swift中创建一个子视图,它完全有效,直到我尝试在同一个类中添加一个IBOutlet.这是代码:
import Foundation
import UIKit
class ProfileFoldingCellView: UIView {
@IBOutlet var mainLabel: UILabel!
public var cellIndex: Int = 0
init(index: Int) {
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
cellIndex = index
print("Index: \(cellIndex)")
setupContentView()
}
func setupContentView() {
let contentView = UINib(nibName: "ProfileFoldingCellView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(contentView)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,标签IBOutlet的创建没有任何问题,并且没有其他过时或未使用的插件漫游.
我还确保将ProfileFoldingCellView.swift设置为文件所有者的类.
一切都运行良好,直到我连接插座!然后我收到这个错误:
相信我,我已经尝试了一切.我可能已经重新创建了一百万次,没有任何工作.任何帮助将不胜感激!
我一直在尝试在我的 iOS 应用中实施原生 Google adMob 广告。这是我正在关注的教程:
https://developers.google.com/admob/ios/native/advanced
我成功安装了 pod 'Google-Mobile-Ads-SDK'。然后教程说给 UIView(在故事板或 xib 文件中)类 GADUnifiedNativeAdView,然后添加子视图并将它们链接到 GADUnifiedNativeAdView 提供的 IBOutlets。但是,我无法看到 IBOutlets。
iboutlet ×10
ios ×8
objective-c ×3
cocoa-touch ×2
swift ×2
admob ×1
bundle ×1
native ×1
nib ×1
properties ×1
swift3 ×1
uibutton ×1
uistoryboard ×1
xcode ×1