今朝6時まで探していたのですが、なぜdidSelectRowAtIndexPathメソッドが呼び出されていないのかわかりません。私はこれについてかなり絶望的になっています。
テーブルビューは正しく表示されますが、セルの選択を有効にすることができません。
ヘッダー ファイルに、次を追加しました。
@interface AlertsTable : UIViewController<UITableViewDelegate, UITableViewDataSource, CMPopTipViewDelegate>{
UITableView *TableView;
}
@property (nonatomic, retain) UITableView *TableView;
実装ファイル内:
@synthesize TableView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
//Set the title
//Format Alerts table
//self.view.backgroundColor = [UIColor redColor];
CGFloat sideMargin = 10;
CGFloat topBottomMargin = 44;
CGFloat originX = sideMargin;
// compute width based on view size
CGFloat sizeWidth = (self.view.bounds.size.width - (sideMargin * 2));
CGFloat originY = topBottomMargin;
// compute height based on view size
CGFloat sizeHeight = (self.view.bounds.size.height - (topBottomMargin * 2));
//self.view.frame = CGRectMake(originX, originY, sizeWidth, sizeHeight);
self.TableView = [[UITableView alloc] initWithFrame:CGRectMake(originX, originY, sizeWidth, sizeHeight) style:UITableViewStylePlain];
//Initialize the array.
AlertsItems = [[NSMutableArray alloc] initWithObjects: @"Alert 1", @"Alert 2", @"Alert 3" , @"Alert 4", @"Alert 5", @"Alert 6", nil];
[self.TableView setDelegate:self];
[self.TableView setDataSource:self];
[self.view addSubview:TableView];
TableView.userInteractionEnabled = YES;
TableView.allowsSelection = YES;
TableView.allowsSelectionDuringEditing = YES;
NSLog(@"delegate:%@ dataSource:%@", self.TableView.delegate, self.TableView.dataSource);
}
チェックでは、デリゲートとデータソースの両方が nil ではありません。
「Alertstable」は、UITableViewController ではなく、UIViewController から継承されることに注意してください。
これは、私が選択した実装のために必要です。テーブルビューは、画面に表示されるポップアップ ウィンドウに表示されます (インターネットから取得した別のクラスを使用)。
これは didSelectRowAtIndexPath メソッドです。
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *alertString = [NSString stringWithFormat:@"Clicked on row #%d", [indexPath row]];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertString message:@"" delegate:self cancelButtonTitle:@"Done" otherButtonTitles:nil];
[alert show];
}
メソッド:
[super touchesBegan:...];
[super touchesEnded:...];
[super touchesMoved:...];
実装されていません。
別のViewControllerからAlertTableを追加しました
AlertsTable *AlertTable = [[AlertsTable alloc] WithButton:sender withArray:self.PopTipViews];
[self.view addSubview:AlertTable.view];
私も実装しました:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Set up the cell...
[[cell textLabel] setText:[AlertsItems objectAtIndex:indexPath.row]];
NSLog (@"%@",[AlertsItems objectAtIndex:indexPath.row]);
return cell;
}
何が問題なのか分かりますか?
私は Xcode の経験があまりなく、本当に行き詰まっています。
編集:
カスタムではないことは知っていますが、プロジェクトへのリンクはここにあります(おそらく何かを見落としています:
https://www.bilbu.be/BarConnect_v2.zip
LoginViewController.xib が適切にリンクされていない (en.lproj サブフォルダーで利用可能) ため、最初にリンクする必要がある場合があります (遅すぎることに気づき、以前に友人がファイルをアップロードしていました - 残念ながら自分で再アップロードすることはできません) )。
ViewController VC クラスは AlertsTable VC クラスを呼び出します。このプロジェクトには、無視できると思われるものが他にもあります...
このプロジェクトの目的は、ビジュアル インターフェイスのプロトタイプとして機能することのみであることに注意してください。これは、最適化されたアプリケーションを意図したものではありません (これは、他の開発者が行うことです)。これがうまくいかない場合は、Photoshop を使用してインターフェイスを作成しますが、それでは説得力がないと思います...