标签: ibaction

以编程方式创建IBOutlets和IBActions

我想用代码而不是界面构建器创建IBOutlets和IBActions.

假设我的UI上有一个按钮btnDisplay,我的代码中有一个方法叫做displayMessage.我需要写的代码是什么,以便在btnDisplay点击时displayMessage运行?

cocoa-touch objective-c iboutlet ibaction ios

10
推荐指数
1
解决办法
4730
查看次数

如何在UIButton中实现两个没有重叠的IBAction?

我从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事件.

谢谢!

objective-c uibutton ibaction ios

9
推荐指数
1
解决办法
2289
查看次数

IBActions是否在主队列上被触发?

我试图搜索出来,但有点卡在这个问题上.关于UI的所有指南都说,所有UI内容都应该在GCD主线程上,但是没有人说过IBActions的内部实现.

那么,IBActions是否会在GCD主线上发布?

user-interface grand-central-dispatch ibaction ios

9
推荐指数
1
解决办法
953
查看次数

你可以硬编码IBActions和IBOutlets,而不是在Interface Builder中手动拖动吗?

是否可以在代码中对IBActions和IBOutlets 进行硬编码,而不是在Interface Builder中拖动它们?

cocoa-touch objective-c iboutlet ibaction

8
推荐指数
2
解决办法
7154
查看次数

在Cocoa中为NSMenuItem设置目标/操作的正确方法?

我正在进行一些初步的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我已经连接NSMenustatusMenu的应用程序委托(因此菜单下的所有显示出来NSStatusBar …

cocoa interface-builder nsstatusitem nsmenuitem ibaction

7
推荐指数
1
解决办法
4864
查看次数

在主视图控制器中的自定义单元格内使用UIButton中的IBAction

我创建了一个自定义单元格,其中包含自己的.m,.h和.xib文件.在单元格中,我有一个UIButton,我添加到IB中的xib.

我可以在这个自定义单元格.m中从UIButton接收IBAction,但实际上,我想将该按钮转发到托管表格的主视图.m(以及自定义单元格)并在那里使用操作.

我花了最后4个小时尝试各种方法 - 我应该使用NSNotificationCenter吗?(我已经尝试过Notifications批次,但无法让它工作,不确定我是否应该坚持不懈)

iphone objective-c uibutton nsnotificationcenter ibaction

7
推荐指数
1
解决办法
4147
查看次数

Xcode 4.5中的IBAction

任何人IBAction touchUpInside在Xcode 4.5中都没有响应,部署目标iOS 5也是如此?它适用于iOS6的模拟器,但不适用于iOS5.

ibaction ios xcode4.5

7
推荐指数
2
解决办法
1154
查看次数

IBAction没有被调用

我正在为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中的按钮并且从未遇到过问题......但由于某种原因,这并没有被调用.我通过选择按钮 - >连接检查器 - >在里面修改 - >文件所有者 - >提交来连接它...有人有这个问题吗?

iphone ipad ibaction ios

7
推荐指数
1
解决办法
8769
查看次数

使用IBAction按钮缩放MapView

我有一个问题.我的当前位置以地图视图显示并居中,但地图区域不会放大.我尝试通过从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)

zoom mkmapview ibaction ios ios6

7
推荐指数
1
解决办法
4719
查看次数

在Swift协议中,IBActions的更好策略是什么?

我正在创建一个Swift项目,我想定义一个特定的协议来强制其他组件来实现一个animate方法:

protocol AnimatableBehavior {
    @IBAction func animate()
}
Run Code Online (Sandbox Code Playgroud)

问题是我希望这个方法是一个IBAction,但我从XCode得到这个错误:

只有实例方法可以声明'IBAction'

我的问题是,你将如何实现这样的事情?

我考虑过:

  1. 删除@IBAction,但后来我需要记住在每个实现的类中添加它.不是很优雅,容易出错.
  2. 创建一个基类而不是协议,但后来我强制所有组件继承我的基类而不是他们自己选择的基类,所以它不是一个有效的选项.

还有其他想法吗?


编辑:回复以下评论.

IBAction关于协议的想法是因为在项目中将有许多不同的开发人员实现小的UI组件,所有这些组件都具有animate方法.这些组件可以通过编程方式添加,也可以通过Interface Builder添加,它们总是非常方便,IBAction因为我打算从IB文件中组合它们以最大限度地简化视图控制器(这显然是一个仅查看任务).

因此,下面提出的在控制器中添加一个只调用animate组件的方法的解决方案并不好,因为它是冗余代码并使Controller更依赖于View.

让开发人员记住IBAction在方法上添加关键字的想法是可行的,但正如我所说它容易出错(并且我的意思是会有一些遗忘),我想确保这是总是可以从IB访问.它还增加了额外的认知负荷,因为我需要记录IBAction协议的缺失并请求实现者手动添加它.

我知道这不是在iOS中工作的常见方式UIKit,但这就是我发布问题的原因,也许有人有另一种想法.

protocols ibaction ios swift swift-protocols

7
推荐指数
1
解决办法
3298
查看次数