从不同的类更改 UIButton alpha
Posted
技术标签:
【中文标题】从不同的类更改 UIButton alpha【英文标题】:Change UIButton alpha from different class 【发布时间】:2013-10-14 19:57:43 【问题描述】:大家好!
我想更改UIButton
的alpha
,这听起来很简单。但是,我想从不同的类(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 视图的图像是不同的[重复]