0

私は、本やチュートリアルに従わずに、最初のアプリを作成し始めたばかりの初心者です。起動時にヘッダーにテキストフィールドがあり、最初は行がない単一のセクションを持つ UITableView を表示する単純なアプリを作成しました。テキスト フィールドにテキストを入力すると、Web API 呼び出しが行われ (Wikipedia から JSON データが取得されます)、呼び出しの結果が表の行に入力されます。通常、テーブルの下部が画面に表示されなくなるほどの結果が得られます。テーブルをスクロールしようとするまでは、すべて問題ありません。そうなると、画面右端にスクロールバーが表示されなくなり、指の動きに合わせて表が1対1で動かなくなります。そして指を離すと、テーブルは上部に戻り、テキスト フィールドが再び画面の上部に表示されます。したがって、基本的には、画面にすべてが収まる行または十分な数の行が存在しない場合と同じように動作します。私新しいデータが入った後にテーブルビューに送信reloadDataしています-サイズが変更されたことを通知するために、他のメッセージを送信する必要がありますか?

編集: この同じ質問を私のプロジェクト ファイルと共に MacRumors のフォーラムに投稿しました。それが私を助けるのに役立つと思われる場合は、それを見てプロジェクトファイルをダウンロードしてください。

4

4 に答える 4

3

WordsHeaderView nib ファイルから「use autolayout」を削除します。nib ファイルをクリックし、「ファイル インスペクタ」に移動して、「自動レイアウトを使用」のチェックを外します。テーブルスクロールを「ロック」するヘッダービューに自動レイアウトの制約があります

于 2012-11-12T19:06:56.493 に答える
1

WTAppDelegate.m で -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions を変更します。

次へ

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    WordsViewController *viewController = [[WordsViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    [[self window] setRootViewController:navController];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

次に、WordsViewController.m でメソッド - (id)initWithStyle:(UITableViewStyle)style および -(id)init にコメントを付け、次のメソッドを追加します。

-(void)loadView{
    [super loadView]; 
}
于 2012-11-16T09:22:31.660 に答える
0

WTAppDelegate.mで-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsを変更します

フォローする

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
      self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
      WordsViewController *viewController = [[WordsViewController alloc] init];
      [[self window] setRootViewController:viewController];
      [self.window makeKeyAndVisible];
       return YES;
}

WordsViewController.mから次のメソッドをコメントアウトします

  1. -(id)initWithStyle:(UITableViewStyle)style
  2. -(id)init
  3. -(UIView *)headerView
  4. -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
  5. -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

loadViewメソッドを追加する必要はありません。

WordsViewController.mで、以下を-(void)viewDidLoadに追加します

追加

 wordsHeaderView = [[[NSBundle mainBundle] loadNibNamed:@"WordsHeaderView" owner:self options:nil] lastObject];
 self.tableView.tableHeaderView = wordsHeaderView;
于 2012-11-19T06:42:52.787 に答える
0

「viewForHeaderInSection」として追加する代わりに、「tableHeaderView」として設定しようとしましたか。以下のようになる場合があります。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    tableView.tableHeaderView = [self headerView];
    return 1;
}
于 2012-11-15T18:23:43.103 に答える