У меня есть приложение os x, которое использует основные данные.Двойной щелчок по строке в NSTableView не отображает новый вид
У меня есть 3 .xib файлы в моем приложении, те:
1. MainMenu.xib
2. MasterTableViewController.xib
3. DetailViewController.xib
При запуске приложение отображает вид, который имеет NSTableView с парой записей в нем.
имя я, что посмотреть MasterTableViewController
Я хочу, когда пользователь дважды щелкните на строке, чтобы скрыть «мастер» вид и отображать мой «деталь» вид. Я назвал это view DetailViewController.
При двойном щелчке по строке в NSTableView в «главном» представлении ничего не происходит, «ведущий» вид остается видимым. То, что я хочу, - это «главное» представление о исчезновении, а также «подробное» представление.
Вот код, который я прямо сейчас, и больше объяснений следует:
AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (nonatomic,strong) NSViewController *mainAppViewController;
@property (weak) IBOutlet NSView *mainAppView;
- (void)changeViewController:(NSInteger)tag;
@property (weak) IBOutlet NSTableView *websitesTableView;
- (void)tableViewDoubleClick:(id)nid;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "MasterTableViewController.h"
#import "DetailViewController.h"
@interface AppDelegate()
@property (weak) IBOutlet NSWindow *window;
- (IBAction)saveAction:(id)sender;
@end
@implementation AppDelegate
NSString *const masterTable = @"MasterTableViewController";
NSString *const detail = @"DetailViewController";
-(void)awakeFromNib {
[_websitesTableView setTarget:self];
[_websitesTableView setDoubleAction:@selector(tableViewDoubleClick:)];
}
- (void)tableViewDoubleClick:(id)nid {
NSInteger rowNumber = [_websitesTableView clickedRow];
NSTableColumn *column = [_websitesTableView tableColumnWithIdentifier:@"websiteUrl"];
NSCell *cell = [column dataCellForRow:rowNumber];
NSInteger tag = 2;
[self changeViewController:tag];
}
- (void)changeViewController:(NSInteger)tag {
[[_mainAppViewController view]removeFromSuperview];
switch (tag) {
case 1:
self.mainAppViewController = [[MasterTableViewController alloc]initWithNibName:masterTable bundle:nil];
break;
case 2:
self.mainAppViewController = [[DetailViewController alloc]initWithNibName:detail bundle:nil];
break;
}
[_mainAppView addSubview:[_mainAppViewController view]];
[[_mainAppViewController view] setFrame:[_mainAppView bounds]];
[[_mainAppViewController view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// automatically run the master table view controller
NSInteger tag = 1;
[self changeViewController:tag];
}
Теперь, некоторые вы можете подумать, где находится остальная часть кода. Я пропустил код плиты котла для основных данных ниже в AppDelegage.m, так как он не изменился. Я использовал привязку, чтобы заставить NSTableView работать и отображать мои записи, поэтому файлы MasterTableViewController.h и .m пустые, и то же самое верно для файлов DetailViewController.h и .m.
Важное примечание - Что я не могу понять здесь: Если изменить тег в 2 в методе applicationDidFinishLaunching, детальный вид отображается нормально, но если я переключить его обратно на 1, а затем дважды щелкните на строка, «главный» вид (с помощью NSTableView) остается видимой, и ничего не происходит (просмотры не меняются местами)
Кто-нибудь может помочь мне узнать, что не так с моим кодом?
С уважением, Джон
Вы пытались отладить? И он может пойти в tableViewDoubleClick? – anhtu
Да, он идет туда, и я могу получить количество строк, которые были нажаты, и это значение. – user2417624
К чему подключается выход 'websiteTableView' и как? Предположительно, он подключен в MainMenu.xib, но я подумал, что двойное нажатие на таблицу не является частью MainMenu.xib; Я думал, что это в MasterTableViewController.xib. –