从另一个视图控制器中取消选择按钮

Posted

技术标签:

【中文标题】从另一个视图控制器中取消选择按钮【英文标题】:deselecting button from another view controller 【发布时间】:2013-07-17 12:42:38 【问题描述】:

更新

viewcontroller A 转到 B,然后返回 A。我有一个 UIButton,在 viewcontrollerA 的 UItableview 的每个单元格中。当您单击该按钮时,该按钮突出显示并转到 viewcontrollerB。当您返回 viewcontrollerA 时,我希望取消选择按钮。 按钮的突出显示效果很好,但问题是取消选择。

在 cellforrowatindexpath 中,我有这个:

        if(indexPath.row==selectedbuttonindex)
        
            addpeople.selected=YES;
        
        else
        
            addpeople.selected=NO;
        

            UIImage *buttonImageNormal =[UIImage imageNamed:@"addtochatNormal.png"];
                 UIImage *buttonImageSelected =[UIImage imageNamed:@"addtochatSelected.png"];
           [addpeople addTarget:self action:@selector(addpeopletoChat:)
            forControlEvents:UIControlEventTouchDown];


                [addpeople setBackgroundImage:buttonImageSelected     forState:UIControlStateHighlighted];


                 [addpeople setBackgroundImage:buttonImageNormal forState:UIControlStateNormal];
                  [addpeople setBackgroundImage:buttonImageSelected forState:UIControlStateSelected];

                  addpeople.frame = CGRectMake(0,0, 51, 44);

                  [cell.contentView addSubview:addpeople];

我考虑了下面的答案,这是我更新的代码,但仍然无法正常工作:

按钮的选择和视图控制器的切换是通过以下方法实现的:

  -(void) addpeopletoChat : (UIButton*)button



       UITableViewCell *cell_ = (UITableViewCell *)button.superview.superview;
       NSIndexPath *index_Path = [topictableView indexPathForCell:cell_];
       NSLog(@"%@", index_Path);
   selectedbuttonindex=index_Path.row;
  [topictableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:index_Path]    withRowAnimation:UITableViewRowAnimationFade];
   countaddpeople=countaddpeople+1;

  addpeopletochatViewController* viewcontrollerB = [[addpeopletochatViewController alloc]    init];
   viewcontrollerB.viewcontrollerA=self;

   [self.slidingViewController anchorTopViewTo:ECRight];//changes view to viewcontroller B


  

这应该取消选择它

  -(void) somefuction

  NSLog(@"%d", selectedbuttonindex);
   NSUInteger indexArr[] = 0,selectedbuttonindex;
   NSIndexPath *index_Path = [NSIndexPath indexPathWithIndexes:indexArr length:2];
   selectedbuttonindex=-1;
   NSLog(@"%@" @"%@", @"hi", index_Path);

   [topictableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:index_Path] withRowAnimation:UITableViewRowAnimationFade];

   

在viewcontroller B的h文件中我有:

  #import <UIKit/UIKit.h>
  #import "officerTopicsViewController.h"

  @class officerTopicsViewController;
  @interface addpeopletochatViewController : UIViewController


  
  @property (nonatomic,retain) officerTopicsViewController *viewcontrollerA;

  @end

在它的 m 文件中我有:

 -(void)viewDidDisappear:(BOOL)animated
  

 [viewcontrollerA somefunction];


  

但它仍然不起作用,这一次 somefunction 甚至没有被调用,因为 NSlog 不像第一次那样出现。

问候

【问题讨论】:

在viewWillAppear中试试这个方法somefction ... 【参考方案1】:

您没有显示 A->B 或 B->A 转换代码,所以我假设您从 A 推动 B,而从 B 您只是“返回”到 A。在 Viewcontroller B,您正在创建视图控制器 A 的新实例并调用某个函数,这与您现有的视图控制器 A 无关,后者是推送您的视图控制器 B 实例的那个。您需要做的是传递您的视图控制器实例A 作为视图控制器 B 的属性,并在已保存的视图控制器 A 上调用某个函数。或者,您可以在视图控制器 A 的 viewWillAppear 方法中将 selectedbuttonindex 重置为 -1。

例如在创建和推送 ViewControllerB 时:

...
viewControllerB = [[ViewControllerB alloc] init];
[viewControllerB setViewControllerA: self];
[self.navigationController pushViewController:viewControllerB animated:YES];
...

然后在 ViewControllerB 中你有:

-(void)viewDidDisappear:(BOOL)animated

    [myViewControllerA somefuction];

【讨论】:

非常感谢!!现在不能尝试,但它似乎是正确的。我尝试了视图会出现的方法,但是由于我处理视图控制器的方式,这不起作用。 需要在viewControllerB中实现该方法。在调试器中验证这一点非常简单。如果你将它实现为 viewControllerB 中的一个属性,那么你会写 viewControllerB.myViewControllerA = self; viewDidDisappear 被调用了吗? 你,它工作是因为我更喜欢使用 [self.slidingViewController anchorTopViewTo:ECRight];但我妥协后,当我使用 pushviewcontroller 时它工作得很好。谢谢 它可能与sli​​dingViewController 一起使用,并且只使用与viewControllerB 的viewDidDisappear 不同的触发器。您只需要确定当您从 B 返回到 A 并将调用 A 的 somefunction 时调用什么。很高兴它现在对你有用。

以上是关于从另一个视图控制器中取消选择按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何知道从另一个视图控制器中的 UICollectionViewController 按下了哪个按钮

关闭并显示按钮上的视图单击从另一个视图

从另一个具有按钮的视图控制器显示隐藏在视图控制器上的图像

从另一个视图控制器更新视图控制器的内容而不打开它

从另一个视图控制器更新 UIPageControl

从另一个选项卡返回后视图控制器变黑