Thanks everyone again!
I have found nice working example here http://www.raywenderlich.com/4680/how-to-make-an-interface-with-horizontal-tables-like-the-pulse-news-app-part-1



16.10.13, 09:19, BareFeetWare пишет:
On 16 Oct 2013, at 5:05 am, Vyacheslav Karamov <ubuntul...@yandex.ru> wrote:

I need to implement Grid view for iOS 7 and newer.
The users should have ability to scroll its contents both horizontally and 
vertically.
They also should have ability to mark the very first row and column as fixed 
i.e. non-scrollable.

A UITableViewController will take care of the vertical scrolling for you. You 
just need to add horizontal scrolling views to each cell and to the section 
header.

Here's a fairly easy way that works very well:

1. Create a UITableViewController (your own subclass of it), as normal

2. In tableView:cellForRowAtIndexPath: call createColumnsInView:

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView 
dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        BOOL doCreateColumns = [cell.contentView viewWithTag:scrollViewTag] == 
nil;
        if (doCreateColumns)
        {
                [self createColumnsInView:cell.contentView];
        }
//      Configure cell here

        return cell;
}

3. Implement createColumnsInView: to add a UIScrollView which contains the 
columns you want (eg multiple UILabels). Set the UIScrollView's 
contentSize.width to the required width to encompass all of the columns and set 
the delegate to self (ie the UITableViewController subclass). Set the other 
properties as shown:

- (void)createColumnsInView:(UIView*)containerView
{
        UIScrollView* scrollView = [[UIScrollView alloc] 
initWithFrame:containerView.bounds];
        scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | 
UIViewAutoresizingFlexibleWidth;
        scrollView.scrollsToTop = NO;
        scrollView.showsVerticalScrollIndicator = NO;
        scrollView.showsHorizontalScrollIndicator = NO;
        scrollView.alwaysBounceVertical = NO;
        scrollView.alwaysBounceHorizontal = NO;
        scrollView.directionalLockEnabled = YES; // otherwise user can start 
scrolling horizontal then vertical
        scrollView.tag = scrollViewTag;
        scrollView.delegate = self;
        [containerView addSubview:scrollView];
//      Probably add your columns (eg series of UILabels) here.
        scrollView.contentSize = CGSizeMake(totalWidthRequiredForColumns, 
scrollView.frame.size.height - 1); // -1 so doesn't scroll vertically
}

4. Implement tableView:viewForHeaderInSection:section, returning a view 
containing the same sized scrollview that you return in cells. This will be 
your fixed non vertically scrolling header.

- (CGFloat)tableView:(UITableView *)tableView 
heightForHeaderInSection:(NSInteger)section
{
        return sectionHeight;
}

- (UIView*)tableView:(UITableView *)tableView 
viewForHeaderInSection:(NSInteger)section
{
        return self.sectionHeader;
}

- (UIView*)sectionHeader
{
        if (_sectionHeader == nil)
        {
                _sectionHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 
320, sectionHeight)];
                _sectionHeader.backgroundColor = [UIColor colorWithRed:1.0 
green:1.0 blue:0.8 alpha:0.8];
                [self createColumnsInView:_sectionHeader];
        }
        return _sectionHeader;
}

5. Implement scrollViewDidScroll: to synchronize horizontal scrolling of all 
the UIScrollViews:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
        if (scrollView != self.tableView)
        {
                NSMutableArray* containers = [NSMutableArray 
arrayWithObject:self.sectionHeader];
                [containers addObjectsFromArray:self.tableView.visibleCells];
                for (UIView* container in containers)
                {
                        UIScrollView* containerScrollView = 
(UIScrollView*)[container viewWithTag:scrollViewTag];
                        containerScrollView.contentOffset = 
scrollView.contentOffset;
                }
        }
}

Hope this helps,
Tom

Tom Brodhurst-Hill
BareFeetWare 👣

--
iPhone/iPad/iPod and Mac software development, specialising in databases
develo...@barefeetware.com
--
Follow us on Twitter: http://twitter.com/barefeetware/
Like us on Facebook: http://www.facebook.com/BareFeetWare

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/ubuntulist%40yandex.ru

This email sent to ubuntul...@yandex.ru

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to