我正在开发一款iPad应用。在某些阶段,我需要使用下拉类型功能。所以,我也使用UIPopoverView。
当IBAction触发特定的UIButton时,我调整popoverview渲染UITableViewController。
一切正常。我需要当用户点击任何一个单元格时,需要在附加的UIButton标题中设置相关的单元格值。
这里,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];
由于
答案 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
}