更改其余应用程序使用的按钮图像
Posted
技术标签:
【中文标题】更改其余应用程序使用的按钮图像【英文标题】:Change button image for the rest of the app usage 【发布时间】:2013-05-22 18:02:12 【问题描述】:我正在尝试构建一个与 Twitter 集成的应用程序。当用户单击共享按钮时,此按钮应更改其图像。这已经有效,但是当用户单击其他视图并最终再次单击带有共享按钮的视图时……图像又是旧图像了。我不知道如何解决这个问题,所以我可以帮助你给我一些建议:) 代码如下:
在我的 .h 文件中:
- (IBAction)postToTwitter:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *tweetBTN;
...在我的 .m 文件中:
- (void)viewDidLoad
//some code here
if ([[UIImage imageNamed:@"twitter02_dark.png"] isEqual:_tweetBTN.currentImage])
UIImage *twitterImage2 = [UIImage imageNamed:@"twitter02_active.png"];
[_tweetBTN setImage:twitterImage2 forState:UIControlStateNormal];
else
UIImage *twitterImage1 = [UIImage imageNamed:@"twitter02_active.png"];
[_tweetBTN setImage:twitterImage1 forState:UIControlStateNormal];
- (IBAction)postToTwitter:(id)sender
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
SLComposeViewController *tweetSheet = [SLComposeViewController
composeViewControllerForServiceType:SLServiceTypeTwitter];
//some code here
UIImage *twitterImage2 = [UIImage imageNamed:@"twitter02_dark.png"];
[_tweetBTN setImage:twitterImage2 forState:UIControlStateNormal];
如果有人可以帮助我,那就太好了……
更新:
我在答案中进行了修改...但我没有t get one thing: after first launching the app the image should be active (because it isn
t "tweeted")...
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"tweeted"])
UIImage *twitterImage = [UIImage imageNamed:@"twitter02_dark.png"];
[_tweetBTN setImage:twitterImage forState:UIControlStateNormal];
else
UIImage *twitterImage = [UIImage imageNamed:@"twitter02_active.png"];
[_tweetBTN setImage:twitterImage forState:UIControlStateNormal];
...但是图像很暗...为什么?之后这个 if 方法正常工作......对我来说很奇怪
【问题讨论】:
您不想拿着标志来记住状态,而不是在视图中使用图像并尝试比较平等吗? 那将是一个替代方案,但我不知道如何编程。 现在它终于可以工作了...dont know why...but I
m happy ;)
【参考方案1】:
您可以尝试使用用户默认值来存储按钮已被按下的事实
在您的 postToTwitter 方法中:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tweeted"];
去掉viewDidLoad中的语句,把它放到viewDidAppear中:
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"tweeted"])
UIImage *twitterImage = [UIImage imageNamed:@"twitter02_dark.png"];
[_tweetBTN setImage:twitterImage forState:UIControlStateNormal];
else
UIImage *twitterImage = [UIImage imageNamed:@"twitter02_active.png"];
[_tweetBTN setImage:twitterImage forState:UIControlStateNormal];
这将在应用程序启动之间持续存在,因此如果您退出应用程序然后重新进入,按钮仍然会变暗
【讨论】:
嗯...这仅在我在标签栏中的标签之间切换时才有效...但是在单击其他视图后,图像又是旧的了 不确定你的意思......当然,你仍然需要在 postToTwitter 方法中更新图像......(就像你以前一样) 啊,我明白了 - 在这种情况下要做的另一件事是将 viewDidLoad 中的代码移动到 viewWillAppear。这样,它会在每次视图出现时设置,而不仅仅是在应用首次加载时 您是否希望它在您离开视图然后返回时返回“活动”图像?你能更清楚地解释问题是什么吗? ok:起初图像是活动的,点击后它是暗的......当你回来时它仍然应该是暗的......但它不是仍然是暗的,而是处于活动状态再次以上是关于更改其余应用程序使用的按钮图像的主要内容,如果未能解决你的问题,请参考以下文章
点击时无法更改 UItableViewCell 中按钮的图像
如何更改以编程方式创建的一组 UIButton 的标题颜色?
在 Swift 3.0 的应用程序的所有屏幕中更改返回按钮图像