我想用代码而不是界面构建器创建IBOutlets和IBActions.
假设我的UI上有一个按钮btnDisplay,我的代码中有一个方法叫做displayMessage.我需要写的代码是什么,以便在btnDisplay点击时displayMessage运行?
我从a中拖出2个IBActionsUIButton,一个用touchDown事件拖动,第二个用拖拽内部拖动.
- (IBAction)clickButton:(UIButton *)sender {
NSLog(@"Click Button");
}
- (IBAction)dragInsideButton:(UIButton *)sender {
NSLog(@"Drag Button");
}
Run Code Online (Sandbox Code Playgroud)
但是当我向内拖动时,touchDown动作也会被触发.
如何在dragInside时禁用touchDown事件.
谢谢!
我试图搜索出来,但有点卡在这个问题上.关于UI的所有指南都说,所有UI内容都应该在GCD主线程上,但是没有人说过IBActions的内部实现.
那么,IBActions是否会在GCD主线上发布?
是否可以在代码中对IBActions和IBOutlets 进行硬编码,而不是在Interface Builder中拖动它们?
我正在进行一些初步的Cocoa编程,我遇到了一些真正的困难.
从本质上讲,我有一个NSStatusBar与项目NSMenu相连的菜单.菜单有一个NMMenuItem.在IB中,我将NSMenuItem连接到一个NSObject本身设置为ApplicationDelegate类的NSMenuItem ; 然后,我将Received Actions设置IBAction为ApplicationDelegate中的方法.我认为一切都正确连接,除非我运行程序并单击菜单项时IBAction不调用该方法.我真的无法解决这个问题.这是相关的代码.
应用程序委托h文件:
#import <Cocoa/Cocoa.h>
@interface sssAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
}
- (IBAction)showPreferencePanel:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
应用程序委托m文件:
#import "sssAppDelegate.h"
@implementation sssAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
-(void)awakeFromNib{
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setMenu:statusMenu];
[statusItem setTitle:@"Status"];
[statusItem setHighlightMode:YES];
}
- (IBAction)showPreferencePanel:(id)sender {
NSLog(@"Hello World!");
}
@end
Run Code Online (Sandbox Code Playgroud)
正如我所说,在IB我已经连接NSMenu到statusMenu的应用程序委托(因此菜单下的所有显示出来NSStatusBar …
我创建了一个自定义单元格,其中包含自己的.m,.h和.xib文件.在单元格中,我有一个UIButton,我添加到IB中的xib.
我可以在这个自定义单元格.m中从UIButton接收IBAction,但实际上,我想将该按钮转发到托管表格的主视图.m(以及自定义单元格)并在那里使用操作.
我花了最后4个小时尝试各种方法 - 我应该使用NSNotificationCenter吗?(我已经尝试过Notifications批次,但无法让它工作,不确定我是否应该坚持不懈)
任何人IBAction touchUpInside在Xcode 4.5中都没有响应,部署目标iOS 5也是如此?它适用于iOS6的模拟器,但不适用于iOS5.
我正在为iPad构建一个带界面构建器的应用程序.滚动视图占据屏幕的大部分,除了底部的一小部分.滚动向下启用.在底部的小部分(不在scrollview内),有一个连接到IBAction的UIButton:
- (IBAction)submit:(id)sender;
Run Code Online (Sandbox Code Playgroud)
并实施如下:
- (IBAction)submit:(id)sender
{
NSLog(@"submit called");
}
Run Code Online (Sandbox Code Playgroud)
我已经无数次地将IBActions连接到IB中的按钮并且从未遇到过问题......但由于某种原因,这并没有被调用.我通过选择按钮 - >连接检查器 - >在里面修改 - >文件所有者 - >提交来连接它...有人有这个问题吗?
我有一个问题.我的当前位置以地图视图显示并居中,但地图区域不会放大.我尝试通过从didUpdateToLocation方法中取出span和region来获取Rob的建议,但我必须没有正确实现它.我不认为它在viewDidLoad中识别我对setRegion的调用,并且我的按钮无法被识别.请检查下面的代码,并指出错误.我的目标是使用IBAction按钮放大和缩小我的位置.
.H
- (IBAction)zoomIn:(id)sender;
- (IBAction)zoomOut:(id)sender;
Run Code Online (Sandbox Code Playgroud)
.m在viewDidLoad中
double miles = 0.5;
MKCoordinateSpan span;
span.latitudeDelta = miles/69.0;
span.longitudeDelta = miles/69.0;
MKCoordinateRegion region;
region.span = span;
[self.mapView setRegion:region animated:YES];
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
_mapView.mapType = MKMapTypeSatellite;
Run Code Online (Sandbox Code Playgroud)
.m在我的didUpdateToLocation方法中.
[self.mapView setCenterCoordinate:newLocation.coordinate animated:YES];
Run Code Online (Sandbox Code Playgroud)
.放大:
- (IBAction)zoomIn:(id)sender
{
MKCoordinateSpan span;
span.latitudeDelta = _mapView.region.span.latitudeDelta * 2;
span.longitudeDelta = _mapView.region.span.latitudeDelta * 2;
MKCoordinateRegion region;
region.span = span;
region.center = _mapView.region.center;
[self.mapView setRegion:region animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
.缩小 :
- (IBAction)zoomOut:(id)sender
{
MKCoordinateSpan span;
span.latitudeDelta = _mapView.region.span.latitudeDelta / 2;
span.longitudeDelta = _mapView.region.span.latitudeDelta …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Swift项目,我想定义一个特定的协议来强制其他组件来实现一个animate方法:
protocol AnimatableBehavior {
@IBAction func animate()
}
Run Code Online (Sandbox Code Playgroud)
问题是我希望这个方法是一个IBAction,但我从XCode得到这个错误:
只有实例方法可以声明'IBAction'
我的问题是,你将如何实现这样的事情?
我考虑过:
@IBAction,但后来我需要记住在每个实现的类中添加它.不是很优雅,容易出错.还有其他想法吗?
编辑:回复以下评论.
IBAction关于协议的想法是因为在项目中将有许多不同的开发人员实现小的UI组件,所有这些组件都具有animate方法.这些组件可以通过编程方式添加,也可以通过Interface Builder添加,它们总是非常方便,IBAction因为我打算从IB文件中组合它们以最大限度地简化视图控制器(这显然是一个仅查看任务).
因此,下面提出的在控制器中添加一个只调用animate组件的方法的解决方案并不好,因为它是冗余代码并使Controller更依赖于View.
让开发人员记住IBAction在方法上添加关键字的想法是可行的,但正如我所说它容易出错(并且我的意思是会有一些遗忘),我想确保这是总是可以从IB访问.它还增加了额外的认知负荷,因为我需要记录IBAction协议的缺失并请求实现者手动添加它.
我知道这不是在iOS中工作的常见方式UIKit,但这就是我发布问题的原因,也许有人有另一种想法.
ibaction ×10
ios ×7
objective-c ×4
cocoa-touch ×2
iboutlet ×2
iphone ×2
uibutton ×2
cocoa ×1
ios6 ×1
ipad ×1
mkmapview ×1
nsmenuitem ×1
nsstatusitem ×1
protocols ×1
swift ×1
xcode4.5 ×1
zoom ×1