Прокрутка TableView влияет на время отклика SegmentControl

Это может быть странной проблемой, и я надеюсь, что кто-то имел это раньше.

Я добавил SegmentControl в мой TableView, используя этот код:

   UIView *headerView = [[UIView alloc] init ];
   [headerView addSubview:resultsSegment];
    self.tableView.tableHeaderView = headerView;

    resultsSegment.frame = CGRectMake(45, 123, 250, 40);
    [self.tableView addSubview:resultsSegment];

С помощью этих форумов первые три строки сделали часть сегмента заголовка TableView так, чтобы он оставался на месте для прокрутки. Отлично.

Однако это отключило возможность нажатия на SegmentControl.

Добавление последней строки сделало это возможным снова.

SegmentControl выполняет отличную прокрутку до тех пор, пока он действительно не отвечает. Он не выдает никаких ошибок и в конечном итоге принимает нажатие пальца, но вы должны нажать на него 5/6 раз, прежде чем он переключится.

Если кто-то может пролить свет на это, это было бы удивительно

Я с радостью предоставлю любую дополнительную информацию!

РЕДАКТИРОВАТЬ ----

ViewController.h

@interface StdTCPTestViewController : UIViewController <UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate> {
    NSTimer *Timer;
}

@property (nonatomic, strong) NSString *typeOfTest;
@property (nonatomic, strong) NSString *testLocation;
@property (nonatomic, strong) NSString *statusText;
@property (nonatomic, strong) NSString *showResultType;
@property (nonatomic, assign) NSInteger *progressInt;
@property (nonatomic, assign) NSString *testDirection;
@property (strong, nonatomic) IBOutlet UITextView *textView;
@property (strong, nonatomic) IBOutlet UIProgressView *testProgressBar;
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, retain) NSArray *ResultTitles;
@property (nonatomic, retain) NSMutableArray *downloadResults;
@property (nonatomic, retain) NSMutableArray *uploadResults;
@property (strong, nonatomic) IBOutlet UISegmentedControl *resultsSegment;

- (IBAction)resultsSwitch:(id)sender;

Выберите области ViewController.m

- (void)viewDidLoad
{

    [resultsSegment setTitle:@"Download" forSegmentAtIndex:0];  // Sets the title for the 1st segment button
    [resultsSegment setTitle:@"Upload" forSegmentAtIndex:1];    // Sets the title for the 2nd segment button


    [super viewDidLoad];

//  UIView *headerView = [[UIView alloc] init ];
//  [headerView addSubview:resultsSegment];
//  self.tableView.tableHeaderView = headerView;

    resultsSegment.frame = CGRectMake(45, 123, 250, 40);
    [self.tableView addSubview:resultsSegment];

    [self APISimpleDemo];
    self.navigationItem.title = typeOfTest; // Set viewcontroller title to the type of test it is   
}

- (IBAction)resultsSwitch:(id)sender {

    if([sender selectedSegmentIndex] == 0){
        showResultType = @"download";
        [self.tableView reloadData];
    }
    else {
        showResultType = @"upload";
        [self.tableView reloadData];
    }
}

#pragma mark Table Definitions 


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;  // Default is 1 if not implemented
{
    return 3;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

{
    switch (section) {
        case 0:
            return @"";
            break;
        case 1:
            return @"";
            break;
        case 2:

            return @"";
            break;
        default:
            return @"Section Count Error";
            break;
    }


}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{

    return 35;
}


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
{
    switch (section) {
        case 0:
            return 10;
            break;
        case 1:
            return 22;
            break;
        case 2:

            return 0;
            break;
        default:
            return 22;
            break;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

{
    switch (section) {
    case 0:
        return 3;
        break;
    case 1:
            return 0;
        break;
        case 2:
            return [ResultTitles count];
            break;
    default:
        return 0;
        break;

    }   
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

{
    UITableViewCell *serverLoc = [tableView dequeueReusableCellWithIdentifier:@"speedCell"];

    switch (indexPath.section) {
    case 0:
            switch (indexPath.row) {
                case 0:
                    serverLoc.textLabel.text = @"Test location:";
                    serverLoc.detailTextLabel.text = testLocation;

                break;
                case 1:
                    serverLoc.textLabel.text = @"Status:";
                    serverLoc.detailTextLabel.text = statusText;
                    break;
                case 2:
                    serverLoc.textLabel.text = @"Progress";
                    serverLoc.detailTextLabel.text = [NSString stringWithFormat:@"%ld%%", (long)progressInt];
                    break;
            }
        break;

    case 2:



            if ([showResultType isEqual:@"download"]) {
                serverLoc.textLabel.text = [self.ResultTitles objectAtIndex:indexPath.row];
                serverLoc.detailTextLabel.text = [self.downloadResults objectAtIndex:indexPath.row];
                break;
            }
            else {
                serverLoc.textLabel.text = [self.ResultTitles objectAtIndex:indexPath.row];
                serverLoc.detailTextLabel.text = [self.uploadResults objectAtIndex:indexPath.row];
                break;
            }

           break;
    default:
        break;
    }

    return serverLoc;

}

2 ответа

Решение

Я решил проблему не отвечающего SegmentControl при прокрутке, переместив приведенный ниже код из метода viewDidLoad в titleForHeaderInSection

 resultsSegment.frame = CGRectMake(45, 123, 250, 40);
            [self.tableView addSubview:resultsSegment];

Теперь это выглядит так:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

{
    switch (section) {
        case 0:
            return @"";
            break;
        case 1:
            resultsSegment.frame = CGRectMake(45, 123, 250, 40);
            [self.tableView addSubview:resultsSegment];
            return @"";
            break;
        case 2:

            return @"";
            break;
        default:
            return @"Section Count Error";
            break;
    }


}

Вероятная проблема здесь заключается в том, что у вас есть один сегмент Control, но вы добавили его в качестве подпредставления как tableHeaderView, так и tableView.

Другие вопросы по тегам