Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone上切换UI按钮_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

在iPhone上切换UI按钮

在iPhone上切换UI按钮,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我如何制作一个显示“显示图片”的按钮,当它被点击时会变成“隐藏图片”。我不熟悉objective C,我知道如何在interface builder中制作按钮,但不知道如何切换按钮的文本和功能。有人能帮我吗?滥用按钮的.tag属性。将触地动作连接到此功能: -(IBAction)buttonClick:(UIButton*)sender { if ( sender.tag ) { sender.tag = 0; sender.text = @"Sh

我如何制作一个显示“显示图片”的按钮,当它被点击时会变成“隐藏图片”。我不熟悉objective C,我知道如何在interface builder中制作按钮,但不知道如何切换按钮的文本和功能。有人能帮我吗?

滥用按钮的.tag属性。将触地动作连接到此功能:

-(IBAction)buttonClick:(UIButton*)sender
{
    if ( sender.tag )
    {
        sender.tag = 0;
        sender.text = @"Show Picture";
        // do actions when "hide" is clicked
    } else {
        sender.tag = 1;
        sender.text = @"Hide Picture";
        // do actions when "show" is clicked
    }
}

滥用按钮的.tag属性。将触地动作连接到此功能:

-(IBAction)buttonClick:(UIButton*)sender
{
    if ( sender.tag )
    {
        sender.tag = 0;
        sender.text = @"Show Picture";
        // do actions when "hide" is clicked
    } else {
        sender.tag = 1;
        sender.text = @"Hide Picture";
        // do actions when "show" is clicked
    }
}
除了(ab)使用tag属性外,您还可以简单地在“选定”和“未选定”之间切换按钮,如下所示:

- (IBAction)myButtonAction:(id)sender
{
   [sender setSelected:![sender isSelected]];

   // or in Objective-C 2.0 if you're so inclined
   sender.selected = !sender.selected;
}
在IB中,您可以直接在inspector中(或通过setTitle:forState:method以编程方式)为按钮的正常和选定状态设置文本。

您也可以简单地在选定和未选定之间切换按钮,而不是使用tag属性(ab)

- (IBAction)myButtonAction:(id)sender
{
   [sender setSelected:![sender isSelected]];

   // or in Objective-C 2.0 if you're so inclined
   sender.selected = !sender.selected;
}

在IB中,您可以直接在inspector中(或通过setTitle:forState:method以编程方式)为按钮的正常和选定状态设置文本。

这一设置的棘手之处在于UIButton没有正确的“正式”文本-请参阅此处的文档:

因为它被设计成有多组独立的文本,根据按钮的当前状态显示;i、 例如,当前是否启用、禁用、高亮显示等。因此,没有一个简单的属性可以设置为使其工作

因此,您希望像这样声明按钮,将其同时声明为操作和出口:

从按钮h:

// inside the class declaration

BOOL pictureShown ; // initializer not required, defaults to 0 (NO)

UIButton * sampleButton ;

// skip irrelevant lines here

@property (nonatomic, retain) IBOutlet UIButton * sampleButton ;
- (IBAction) doSampleButton ;
在Interface Builder中连接这两个状态,然后使用setTitle:forState:方法更改文本(在本例中,我指定了所有状态,因此所有状态的标题都保持不变)。例如:

从button.m:

@synthesize sampleButton ;

- (IBAction) doSampleButton {
    if (pictureShown == YES) {
        // hide the picture, and then...

        [sampleButton setTitle: @"Show Picture" forState: (UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled)] ;
        pictureShown = NO ;
    } else {
        // show the picture, and then...

        [sampleButton setTitle: @"Hide Picture" forState: (UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled)] ;
        pictureShown = YES ;
    }
}
您还将注意到,我在视图控制器中为带有按钮的视图声明了一个实例变量“pictureShown”,以跟踪按钮的当前“模式”,并且我基本上在按钮的操作中使用if语句来确定根据按钮的当前模式执行的功能,并相应地切换按钮文本

(我使用它来跟踪按钮的当前模式,而不是直接检查按钮的当前标题,或者在按钮上存储状态的其他方式,因为就MVC而言,这种状态属于控制器类。)

(如果该功能需要大量代码,我会使用消息发送给self,即:

[self showPicture] ;
[self hidePicture] ;

为了避免将所有内容都塞进doSampleButton中,但这纯粹是风格上的,而不是技术上的要求。

这个按钮的棘手之处在于,UIButton没有正确的“正式”文本-请参阅此处的文档:

因为它被设计成具有多个独立的文本集,根据按钮的当前状态显示;即,它当前是启用还是禁用、高亮显示等。因此,没有一个简单的属性可以设置来实现此功能

因此,您希望像这样声明按钮,将其同时声明为操作和出口:

从按钮h:

// inside the class declaration

BOOL pictureShown ; // initializer not required, defaults to 0 (NO)

UIButton * sampleButton ;

// skip irrelevant lines here

@property (nonatomic, retain) IBOutlet UIButton * sampleButton ;
- (IBAction) doSampleButton ;
在Interface Builder中连接这两个状态,然后使用setTitle:forState:方法更改文本(在本例中,我指定了所有状态,因此所有状态的标题都保持不变)。例如:

从button.m:

@synthesize sampleButton ;

- (IBAction) doSampleButton {
    if (pictureShown == YES) {
        // hide the picture, and then...

        [sampleButton setTitle: @"Show Picture" forState: (UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled)] ;
        pictureShown = NO ;
    } else {
        // show the picture, and then...

        [sampleButton setTitle: @"Hide Picture" forState: (UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled)] ;
        pictureShown = YES ;
    }
}
您还将注意到,我已经在视图的视图控制器中使用按钮声明了一个实例变量“pictureShown”,以跟踪当前的“模式”我基本上是在按钮的动作中使用if语句来确定根据按钮的当前模式执行哪个功能,并相应地切换按钮文本

(我使用它来跟踪按钮的当前模式,而不是直接检查按钮的当前标题,或者在按钮上存储状态的其他方式,因为就MVC而言,这种状态属于控制器类。)

(如果该功能需要大量代码,我会使用消息发送给self,即:

[self showPicture] ;
[self hidePicture] ;

避免将其全部塞进doSampleButton中,但这纯粹是风格上的,而不是技术上的要求。

不要滥用tag属性。建议仅将其用作按钮标识符(例如,当视图中只有几个按钮时,您将其标记设置为0、1、2…以便可以识别哪个按钮是发送者)。您可以设置一些全局int i变量,并相应地更改其值。

不要滥用tag属性。建议仅将其用作按钮标识符(例如,当视图中只有几个按钮时,您可以将其标记设置为0、1、2…以便识别哪个按钮是发送者)。您可以设置一些全局int i变量,并相应地更改其值。

通常您会以另一种方式使用它:在IB中“标记”按钮(或其他项)是一种简单的方法,因此您只能有一个处理程序接收事件,从标记中可以看到操作来自哪个按钮。(您仍然可以混合这两种方法,例如,通过标记按钮0、2、4,…和使用
sender.tag^=1;
翻转最后一位,并使用
sender.tag&1
进行测试,但我故意将示例保持得非常简单,以便您了解发生了什么。通常,您会使用另一种方法:这是一种“标记”按钮的简单方法(或其他项),因此您只能有一个处理程序接收事件,它可以从标记中看到操作来自哪个按钮。(您仍然可以混合使用这两种方法,例如,通过标记按钮0、2、4,…并使用
sender.tag^=1;
翻转最后一位,以及使用
sender.tag&1
进行测试,但我故意将示例保持得非常简单,以便您看到发生了什么。