Как передать прокрутку ввода в другое представление - PullRequest
1 голос
/ 01 апреля 2011

Этот сайт действительно потрясающий.

На этот раз у меня есть простой вопрос. Я хотел бы передать любую прокручиваемую информацию от пользователя (может быть колесо, тачпад и т. Д.) В NSScrollView, который содержит мои собственные подпредставления.

В настоящий момент, если пользователь прокручивает только на DocumentView (вне рамок моих подпредставлений), прокрутка работает нормально, но если они прокручиваются, когда курсор находится над подпредставлением, ничего не происходит. Поэтому я бы хотел, чтобы подпредставление распознало событие прокрутки и передало его обратно в представление прокрутки.

Любая помощь очень ценится.

Приветствие.

EDIT: Вот код, который я использую для добавления подпредставлений в documentView _milestoneView и _activityView являются подклассами NSView, которые имеют соответствующий кончик (созданный с помощью instantiateNibWithOwner и соответственно подключенных объектов), они содержат NSTextField, PXListView, а некоторые имеют NSProgressIndicator.

-(void)useProject:(NSNumber *)projectId
{
[self resetView];

NSRect bounds = [[self view] bounds];
NSRect defaultFrame = NSMakeRect(20, NSMaxY(bounds)-93, NSMaxX(bounds)-20, 50);


//Prepare the milestone view
if (_milestoneView == nil)
    _milestoneView = [MilestoneView milestoneViewFromNibWithFrame:defaultFrame withProject:[BCLocalFetch projectForId:projectId]];
[_milestoneView reloadList];


//Prepare the activity view
if (_activityView == nil)
    _activityView = [ActivityView activityViewFromNibWithFrame:defaultFrame withProject:[BCLocalFetch projectForId:projectId]];

[self refresh];
}

Затем я использую метод обновления, чтобы изменить их расположение, так как размеры контента меняются, поэтому я хотел использовать отдельный метод.

-(void)refresh
{
//Position the milestones first
[_milestoneView setFrameOrigin:NSMakePoint(20, NSMaxY([[self view] bounds])-[_milestoneView frame].size.height-60)];
if ([[_milestoneView milestones] count] > 0)
    [[self view] addSubview:_milestoneView];

//Now the activity view
[_activityView setFrameOrigin:NSMakePoint(20, [_milestoneView frame].origin.y-[_activityView frame].size.height-20)];
[[self view] addSubview:_activityView];

[self autosizeView];
}

-(void)autosizeView
{
//Resize the view to accommodate all subviews
NSRect oldFrame = [[self view] frame];
CGFloat lastY = [_activityView frame].origin.y;
if (lastY < 0) {
    CGFloat newHeight = oldFrame.size.height + (-lastY);
    [[self view] setFrameSize:NSMakeSize(oldFrame.size.width, newHeight)];
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"BBContentDidResizeNotification" object:self];
}

1 Ответ

0 голосов
/ 29 апреля 2011

Хорошо, так что я вернулся к проблеме и, наконец, решил ее.Реализация была на самом деле довольно простой.Я добавил свойство в PXListView, чтобы указать на NSScrollView, который нужно прокрутить.Затем я реализовал метод scrollWheel: NSResponder следующим образом:

-(void)scrollWheel:(NSEvent *)theEvent
{
    //Pass scrolling to the superview
    [_scrollHandler scrollWheel:theEvent];
}

И все хорошо!

...