0

これは奇妙な問題かもしれません。

このコードを使用して、TableView に SegmentControl を追加しました。

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

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

これらのフォーラムの助けを借りて、最初の 3 行で TableView ヘッダーのセグメント部分を作成し、スクロールできるようにしました。偉大な。

ただし、これにより、SegmentControl をクリックする機能が無効になりました。

最後の行を追加すると、それが再び可能になりました。

SegmentControl は優れた UNTIL スクロールを実行し、その後本当に応答しなくなります。エラーは発生せず、最終的には指からのプレスを受け入れますが、切り替える前に 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;

}
4

2 に答える 2

0

ここで発生する可能性のある問題は、segmentControlが1つあるが、それをサブビューとしてtableHeaderViewとtableViewの両方に追加したことです。

于 2013-02-17T06:23:50.523 に答える
0

以下のコードをviewDidLoadメソッドからtitleForHeaderInSectionに移動することで、スクロール時にSegmentControlが応答しないという問題を解決しました。

 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;
    }


}
于 2013-02-17T19:03:35.473 に答える