これについて多くの質問と回答を見てきましたが、私がやっていることに合うものはないようです。
テーブルビューで作成したかなり長いユーザー入力フォームがあり (質問のラベルとテキストビューはテーブルセルにあります)、ユーザーが複数選択オプション (ドロップダウンリストなど) を持つテキストビューをクリックしたときにポップオーバーを起動する必要があります。ポップオーバーは tableviewcontroller の上部から表示されているようですが、それを配置する場所を計算する方法がわからないため、セルでクリックされたテキストビューの上にあります。セルには複数のテキストビューが存在する可能性があるため、セルが選択されているときにポップオーバーを表示したくないのですが、これはオプションのようです。
現在、フォームの下部にあるテキストビューをクリックしても、ポップオーバーは表示されません。ハードコーディングの境界で試行錯誤して正しい四角形を見つけることができることは知っていますが、これを一貫して計算する方法が必要です。
次のようにポップオーバーを起動します。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
Boolean returnVal = YES;
if(self.popOverController == nil){
switch(textField.tag)
{
case 1:
[self fireDisciplinePopOver:[textField bounds]];
returnVal = NO;
break;
case 2:
etc...
default:
break;
}
}
return returnVal;
}
-(void)fireDisciplinePopOver:(CGRect)rect
{
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
ICAMDisciplineTableViewController *popoverTable = (ICAMDisciplineTableViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"DisciplineController"];
self.popOverController = [[UIPopoverController alloc]initWithContentViewController:popoverTable];
self.popOverController.delegate = self;
popoverTable.delegate = self;
[self.popOverController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}