Прокрутите UITableView по горизонтали в Table View Controller - PullRequest
0 голосов
/ 21 ноября 2019

У меня есть сцена «Контроллер табличного представления», в котором есть контроллер табличного представления, в котором есть табличное представление, в котором есть ячейка табличного представления, в которой есть представление содержимого, в котором есть мои 3 UILabels. Все это хорошо, он отображает мои данные, и я могу просто прокручивать вверх и вниз свои данные.

Однако мои данные в моей ячейке табличного представления шире, чем на экране. Я хотел бы иметь возможность прокручивать всю таблицу по горизонтали, чтобы все данные в моей таблице были доступны для просмотра. Мне удалось добавить UIScrollView в представление содержимого, и тогда каждая отдельная ячейка могла прокручивать по горизонтали, но данные столбчатые, поэтому прокрутка их в виде таблицы имеет больше смысла. Я понимаю, что UITableView по какой-либо причине неспособен к горизонтальной прокрутке, и в этом случае представляется разумным поместить всю таблицу в UIScrollView. Однако, кажется, нет никакого возможного способа вставить UIScrollView между табличным представлением и контроллером табличного представления в IB.

Есть какие-нибудь предложения относительно того, как реализовать эту, казалось бы, базовую функциональность? Я должен упустить что-то действительно основное.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2019

Так что, похоже, нет простого способа сделать прокрутку UITableViewController в горизонтальном направлении. Под горизонтальной прокруткой я подразумеваю поддерживать вертикальную прокрутку И добавить возможность горизонтальной прокрутки для просмотра элементов UITableViewCell, чьи элементы данных шире экрана, и для прокрутки всей таблицы в виде связной таблицы. Я не хочу поворачивать UITableView на 90 градусов, чтобы он прокручивался по горизонтали за счет прокрутки по вертикали, и я не хочу прокручивать данные в каждой ячейке по отдельности. Решение для UITableView, с которым я столкнулся, больше всего походило на то, о чем я говорю, это здесь , но я не реализовывал это решение. Вместо этого я изменил весь свой подход и удалил кучу кода. Поскольку я отображал электронную таблицу как данные, я создал файл CSV и открыл его с помощью Quick Look QLPreviewController. Он открывает файл и обеспечивает как вертикальную, так и горизонтальную прокрутку, и позволяет пользователю сохранять или делиться или отправлять по электронной почте файл, который был чем-то еще, что мне нужно было реализовать, поэтому это решение убило общеизвестных 2 птиц одним камнем, и это было довольно просто.

В моем контроллере представления я импортировал QuickLook.h и принял протокол.

#import <UIKit/UIKit.h>
#import <QuickLook/QuickLook.h>

@interface MyTableViewController : UITableViewController <QLPreviewControllerDataSource>

@end

Я объявляю 2 свойства в моем контроллере представления

@interface TimersTableViewController ()
@property NSString *csvFile;
@property QLPreviewController *qlController;
@end

Реализация протокола в моем контроллере:

// quick look preview controller protocol methods.  there is only one file and it is the csv file
// this controller will allow the use to decide what they want to do with the file. DML 11/21/2019
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
     return [NSURL fileURLWithPath:self.csvFile];
}

Затем я записал свои данные вфайл и вызывается QLPreviewController для его отображения.

- (void)setLogs:(NSArray<LogRecords *> *)logs{
    _logs = logs;
    // allocate the quick look preview controller to display the csv file.  
    if (self.qlController == nil){
        self.qlController = [[QLPreviewController alloc] init];
        // set self as it's datasource
        self.qlController.dataSource = self;
    }
    // get the path to the NSDocumentDirectory which
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    // the path I want is the first object in the array
    NSString *documentsDirectory = [paths objectAtIndex:0];
    // set the cvs file name
    self.csvFile = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"MyCSVFile.csv"];
    // use NSFileManaget to create the file because it needs to exist before it can be opened with NSFileHandle 
    NSFileManager *fm = [NSFileManager defaultManager];
    [fm createFileAtPath:self.csvFile contents:nil attributes:nil];
    NSFileHandle  *file = [NSFileHandle fileHandleForWritingAtPath:self.csvFile];
    // write the header to the csv file
    [file writeData:[@"date,time,message" dataUsingEncoding:NSUTF8StringEncoding]];
    // for my app I loop through the logs and write each of them to the file
    for (int i = 0; i < self.logs.count; i++){
        [file writeData:[[[self.logs objectAtIndex:i] toCsvString] dataUsingEncoding:NSUTF8StringEncoding]];
    }
    [file closeFile];
    // make sure quick look preview controller gets latest csvFile 
    [self.qlController reloadData];
    // display the quick look preview controller
    [self presentViewController:self.qlController animated:YES completion:nil];
}

Это решило обе мои проблемы одновременно: горизонтальная прокрутка и предоставление пользователю доступа к файлу, чтобы сохранить или поделиться им.

0 голосов
/ 21 ноября 2019

Я не думаю, что легко достичь того, что вы упоминаете, используя только табличное представление. Одним из способов было бы, чтобы каждая ячейка табличного представления представляла собой коллекционное представление с горизонтальной прокруткой. Вот статья о том, как это сделать.

Другой вариант - использовать коллекционное представление с пользовательским макетом потока, чтобы можно было обеспечить как вертикальную, так и горизонтальную прокрутку. Если я не ошибаюсь, то, чего вы хотите достичь, это что-то вроде . Он показывает, как это сделать, но это немного старая статья, а код написан на Objective-C.

Кроме того, взгляните на этот вопрос StackOverflow , где предлагается сделать это спредставление прокрутки и представление коллекции.

Вообще говоря, немного ищите в StackOverflow и в Интернете. Я нашел много сайтов / статей, обсуждающих эту тему, так что вы обязательно найдете решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...