我想實現JViewEditorPanel,其中CenterViewController滑動並顯示包含TableView的LeftViewControler。一旦用戶在TableView中選擇了一行,我希望CenterView通過向後滑動恢復其位置,並且還有一個方法(在CenterViewController中)通過LEftViewController中的參數調用以更新CenterView。有人可以幫助我嗎?ViewController與JASidePanels之間發送數據
謝謝。
我想實現JViewEditorPanel,其中CenterViewController滑動並顯示包含TableView的LeftViewControler。一旦用戶在TableView中選擇了一行,我希望CenterView通過向後滑動恢復其位置,並且還有一個方法(在CenterViewController中)通過LEftViewController中的參數調用以更新CenterView。有人可以幫助我嗎?ViewController與JASidePanels之間發送數據
謝謝。
有兩個部分解決問題的方法:
[self.viewController showCenterPanelAnimated:YES]; //此方法添加到您的tableView行
:
// Add to your tableView row method
NSNotification *msg = [NSNotification notificationWithName:@"leftPanelMsg" object:@"Hello"];
[[NSNotificationCenter defaultCenter] postNotification:msg];
在中央面板類
: 添加觀察員在viewDidLoad中和另一種方法時傳回消息:
- (void)viewDidLoad {
[super viewDidLoad];
// method listen to meesssage with specfic name and calls selector when it get hit
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(msgResponder:) name:@"leftPanelMsg" object:nil];
}
-(void)msgResponder:(NSNotification *)notification {
NSLog(@"name:%@ object:%@", notification.name, notification.object);
}
你看到JASidePanels這些方法
// toggle them opened/closed
- (void)toggleLeftPanel:(id)sender;
- (void)toggleRightPanel:(id)sender;
JASidePanels是一個很好的實現,可以設置左,中,右視圖控制器。因此,讓我們說你有一個UITableViewController作爲左VC,並根據行選擇加載中心VC。你應該在左邊的VC中有#import「UIViewController + JASidePanel.h」。
toggleLeftPanel隱藏表格,它使得視圖平滑,但是如表格隱藏,通知能夠在屏幕上閃爍。但是當您滑動中央面板時,桌子已經在那裏,那麼爲什麼它隱藏了桌子。 – 2013-08-21 13:38:08
它不一定隱藏表格視圖,它隱藏在JASidePanel初始化中設置的leftPanelController。視圖控制器已經坐在那裏,中央面板剛剛離開原來的合作伙伴。 – satheeshwaran 2013-08-21 13:50:46
如果你想使用委託,那麼你必須添加一個協議到LeftViewController.h文件,例如
@protocol LeftViewControllerDelegate <NSObject>
-(void)useThisValue:(NSString *)value;
@end
@interface LeftViewController : UITableViewController
@property (weak, nonatomic) id <LeftViewControllerDelegate> delegate;
@end
在你的tableView:didSelectRowAtIndexPath方法:方法,可以再加入
[self.delegate useThisValue:menu[indexPath.row]];
你CenterViewController將成爲LeftViewController的代表,所以在你的CenterViewController.h文件,導入LeftViewController.h和加:
@interface CenterViewController : UIViewController <LeftViewControllerDelegate>
- (void)useThisValue:(NSString *)value;
在你的CenterViewController.m文件中,導入AppDelegate.h和你的RootViewController.h文件。在其viewDidLoad方法,你必須讓你的JASidePanelController子類(RootViewController的)和leftViewController的當前實例的引用:
RootViewController *rootViewController = (RootViewController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];
LeftViewController *leftViewController = (LeftViewController *)rootViewController.leftPanel;
然後進行CenterViewController的LeftViewController的代表:
leftViewController.delegate = self;
[super viewDidLoad];
實現自己的喜好委託方法,例如:
- (void) useThisValue:(NSString *)value
{
self.label.text = value;
}
我不得不承認,在這裏感謝凱文·麥克尼什以指出如何正確獲取RootViewController和LeftViewController的實例,以便讓委託模式與JASidePanels一起工作。
謝謝!我想知道是否可以包含「UIViewController + JASidePanel.h」,並使用它來代替查找根控制器和左側面板?我正在嘗試它,並且左側面板保持爲零。 – SunnyD 2014-03-20 04:58:48
Jasidepanel是一個很好的控件,但還有其他控件更容易爲您實現。嘗試在我的答案中的一個,它不會讓你感到困惑。 – 2013-05-13 23:36:02