从不同的类更改 UIButton alpha

Posted

技术标签:

【中文标题】从不同的类更改 UIButton alpha【英文标题】:Change UIButton alpha from different class 【发布时间】:2013-10-14 19:57:43 【问题描述】:

大家好!

我想更改UIButtonalpha,这听起来很简单。但是,我想从不同的类(ViewControllerB.m/.h)更改该 alpha。我有一个名为“ViewController.h/.m”的类,我从这个类中调用了一个视图,该视图像弹出窗口一样出现在 ViewController 上。现在我得到了一个UIButton,当它被触摸时它会显示弹出窗口。如果按下按钮,其alpha 将变为“0.0”并显示弹出窗口。我从另一个类的弹出窗口中获得了代码,如果小狗被解雇,我想将按钮的alpha 更改为“1.0”。我已经有了一个方法,它在弹出窗口被关闭时调用。我尝试了一切,但到目前为止还没有奏效。也许是因为我是ios的初学者^^。

我希望你明白我想说什么。我会将代码保持原样(干净),以免您与我之前尝试过的方式混淆。

这里有我的课程代码:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController 
//....
    IBOutlet UIButton *myBtn;
//...


- (IBAction)OpenPopUp:(id)sender;

现在在我的 ViewController.m 中:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

//...viewDidLoad....everything else

- (IBAction)OpenPopUp:(id)sender 
 [UIView animateWithDuration: 1.0
                     animations:^
    myBtn.alpha = 0.0;
                     ];



@end

在我的 ViewControllerB.h 中:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface ViewControllerB : UIViewController 
//...some unneccesary outlets


//Displaying popup.....
- (void)presentInParentViewController:(UIViewController *)parentViewController;

@end

ViewControllerB.m:

#import "ViewControllerB.h"

@interface ViewControllerB () 

@end

@implementation

//...ViewDidload...and more

- (IBAction)close:(id)sender 
    //The close button
    [self dismissFromParentViewController];


- (void)dismissFromParentViewController 
    //Removes the nutrition view from the superview

    [self willMoveToParentViewController:nil];

    //Removes the view with or without animation
    if (!self.shouldAnimateOnDisappear) 
        [self.view removeFromSuperview];
        [backgroundGradientView removeFromSuperview];
        [self removeFromParentViewController];
        return;
    
    else 
        [UIView animateWithDuration:0.4 animations:^ 
            CGRect rect = self.view.bounds;
            rect.origin.y += rect.size.height;
            self.view.frame = rect;
            backgroundGradientView.alpha = 0.0f;
        
                         completion:^(BOOL finished) 
                             [self.view removeFromSuperview];
                             [backgroundGradientView removeFromSuperview];
                             [self removeFromParentViewController];
                         ];
    
//THE PLACE I WANT TO CHANGE THE ALPHA BACK!

我真的很感谢任何人的帮助,如果您可以的话,请在代码示例中向我展示。

谢谢,

诺亚

注意:我已经查过这些帖子,但没有成功。

    Passing Data between View Controllers

    Passing data between view controllers in IOS

    Modifying UIButton's alpha property from another class

    Change alpha and enabled UIButton of ClassA from ClassB in object c

【问题讨论】:

【参考方案1】:

有两种方法,

    ViewController *viewDidAppear:* 方法检查 myBtn alpha。如果 alpha 为零,则将 alpha 设置回 1。 您可以将 ViewController 添加为 ViewControllerB 中的委托,并且 ViewControllerB 在其被解除时通知 ViewController您将 myBtn 的 alpha 设置回 1

在我的 ViewControllerB.h 中:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@protocol ViewControllerBDelegate <NSObject>
   - (void)didHidePopoverController
@end

@interface ViewControllerB : UIViewController 
//...some unneccesary outlets

@property(readwrite,weak)id <ViewControllerBDelegate>delegate;
//Displaying popup.....
- (void)presentInParentViewController:(UIViewController *)parentViewController;

@end

ViewController.h

#import <UIKit/UIKit.h>
#import "ViewControllerB.h"
@interface ViewController : UIViewController<ViewControllerBDelegate> 
//....
    IBOutlet UIButton *myBtn;
//...


- (IBAction)OpenPopUp:(id)sender;

@end 

现在在 ViewController.m 中:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

//...viewDidLoad....everything else

- (IBAction)OpenPopUp:(id)sender 
 [UIView animateWithDuration: 1.0
                     animations:^
    myBtn.alpha = 0.0;
                     ];



 - (void)didHidePopoverController 
 [UIView animateWithDuration: 1.0
                     animations:^
    myBtn.alpha = 1.0;
                     ];




@end

ViewControllerB.m:

#import "ViewControllerB.h"

@interface ViewControllerB () 

@end

@implementation

//...ViewDidload...and more

- (IBAction)close:(id)sender 
    //The close button
    [self dismissFromParentViewController];


- (void)dismissFromParentViewController 
    //Removes the nutrition view from the superview

    [self willMoveToParentViewController:nil];

    //Removes the view with or without animation
    if (!self.shouldAnimateOnDisappear) 
        [self.view removeFromSuperview];
        [backgroundGradientView removeFromSuperview];
        [self removeFromParentViewController];
        return;
    
    else 
        [UIView animateWithDuration:0.4 animations:^ 
            CGRect rect = self.view.bounds;
            rect.origin.y += rect.size.height;
            self.view.frame = rect;
            backgroundGradientView.alpha = 0.0f;
        
                         completion:^(BOOL finished) 
                             [self.view removeFromSuperview];
                             [backgroundGradientView removeFromSuperview];
                             [self removeFromParentViewController];
                         ];
    
    [self.delegate didHidePopoverController];
//THE PLACE I WANT TO CHANGE THE ALPHA BACK!

当您显示弹出窗口时,只需将 ViewController 实例分配为 ViewControllerB 实例的委托

【讨论】:

第一种方法似乎很简单!但是如何在不同的类中将 alpha 设置回 1?这就是我所要求的。 第二个应该做!你有什么代码可以提供给我吗?或者你能用我的代码做一个例子吗? 在第一种方式中,您不需要从不同的类将 alpha 设置回 1,因为 viewDidAppear: 将在 ViewController 类中,我认为 myBtn 是 ViewController 类的属性。 没用!我在“didHidePopOverController”中放了一个 NSLOG,但它从未被调用过! :( 有什么建议吗?我已经完成了上面的所有操作! 可以把NSLog放在[self.delegate didHidePopoverController]之前;并打印 self.delegate。我猜委托是空的。您是否在创建 ViewControllerB 时填充了委托【参考方案2】:

更新:我搜索并找到了它。 Anshul Join 的 awser 对我没有用,但对我有用的是:Update a label through button from different view

它不那么复杂且易于实现。没有代表。希望我能帮助任何人。

但总结一下:感谢 Anshul Jain 支持我并尝试为我解决这个问题。谢谢大哥!

【讨论】:

以上是关于从不同的类更改 UIButton alpha的主要内容,如果未能解决你的问题,请参考以下文章

当从不同的类调用更改时,UIView IBOutlet 不会更改

从 UIButton 的类中获取当前的 UIViewController

无法更改 UITableViewCell 内的 UIButton 图像

我想通过单击按钮来更改 UIButton 和 UIImage 视图。但是 UIButton 和 Image 视图的图像是不同的[重复]

iOS:自定义按钮(UIButton 的子类) - 无法更改边框属性

使用下一个和上一个 UIButton 在 UITextView/UILabel 中更改不同的文本