从其他视图更新UIButton标题......?

时间:2013-04-30 12:03:50

标签: ios ipad uitableview uipopovercontroller

我正在开发一款iPad应用。在某些阶段,我需要使用下拉类型功能。所以,我也使用UIPopoverView。

当IBAction触发特定的UIButton时,我调整popoverview渲染UITableViewController。

一切正常。我需要当用户点击任何一个单元格时,需要在附加的UIButton标题中设置相关的单元格值。

enter image description here

这里,popover视图是我单独创建的UITableViewController视图。并在选择Outlet IBAction上调用它。

CGRect dropdownPosition = CGRectMake(self.btnOutlet.frame.origin.x, self.btnOutlet.frame.origin.y, self.btnOutlet.frame.size.width, self.btnOutlet.frame.size.height);
[pcDropdown presentPopoverFromRect:dropdownPosition inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

由于

3 个答案:

答案 0 :(得分:4)

Sangony答案几乎是正确的,但是通过一些小的改动,而不是在没有参数作为观察者的情况下注册方法,你应该添加它以允许一个参数:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(someAction:)
                                             name:@"ButtonNeedsUpdate"
                                           object:nil];

然后,当您发布通知时(在表的视图didSelectRow:atIndexPath :)中,您可以添加一个对象(NSDictionay)作为用户信息:

//...
NSDictionary *userInfoDictionary = @{@"newText":@"some text"};
[[NSNotificationCenter defaultCenter] postNotificationName:@"ButtonNeedsUpdate" 
                                                    object:self 
                                                  userInfo:userInfoDictionary];
//...

然后在观察此通知的类中,您可以使用someAction操作方法中的数据,如下所示:

-(void)someAction:(NSNotification)notification{
    NSString *textForTheButton = [[notification userInfo]objectForKey:@"newText"];
    [self.myButton setTitle:textForTheButton 
                   forState:UIControlStateNormal];
    //...
}

你的按钮标题现在应该是“一些文字”。

答案 1 :(得分:2)

尝试使用NSNotificationCenter。在包含按钮的VC中,放置以下代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(someAction)
                                                 name:@"ButtonNeedsUpdate"
                                               object:nil];

-(void)someAction {
// do stuff to your button
}

在导致按钮被修改的其他VC中,请放置此代码以发出通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ButtonNeedsUpdate" object:self];

答案 2 :(得分:1)

使用didSelectItemWithTitle:之类的方法实现委托协议。使视图控制器控制按钮是弹出窗口中视图控制器的委托。选择行时,通知代理,然后可以更新按钮。

// MainController.h
#include "PopupTableController.h"
@interface MainController : UIViewController <PopUpListDelegate>

// PopupTableController.h
@protocol PopUpListDelegate;
@interface PopupTableController : UITableViewController 
...
@property (nonatomic, assign) id <PopUpListDelegate> delegate;
...
@end

@protocol PopUpListDelegate 
-(void)didSelectItem:(NSUInteger)item;
@end

// PopupTableController.m
// in didSelectRowAtIndexPath:
if (self.delegate) {
   [self.delegate didSelectItem:indexPath.row];
}

// MainController.m
// where you push the table view or prepareForSegue
popupTableController.delegate = self;

// and
-(void)didSelectItem:(NSInteger)item {
    // update the button based on item
}