【问题标题】: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 isnt "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 Im happy ;)

标签: ios uibutton uiimage


【解决方案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:起初图像是活动的,点击后它是暗的......当你回来时它仍然应该是暗的......但它不是仍然是暗的,而是处于活动状态再次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
相关资源
最近更新 更多