从另一个视图控制器中取消选择按钮
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 时它工作得很好。谢谢 它可能与slidingViewController 一起使用,并且只使用与viewControllerB 的viewDidDisappear 不同的触发器。您只需要确定当您从 B 返回到 A 并将调用 A 的 somefunction 时调用什么。很高兴它现在对你有用。以上是关于从另一个视图控制器中取消选择按钮的主要内容,如果未能解决你的问题,请参考以下文章