私のアプリでは、ストーリーボードを使用しています。ストーリーボードの要素の 1 つは UITableViewController です。そのため、その中にテーブルビューがあります。
私の質問は、このテーブルビューに UIView を配置する方法です。それは非表示になり、テーブルビューのテーブルビューセルが押されたときに表示したいと思います。それは可能ですか?どうやってやるの?
私のアプリでは、ストーリーボードを使用しています。ストーリーボードの要素の 1 つは UITableViewController です。そのため、その中にテーブルビューがあります。
私の質問は、このテーブルビューに UIView を配置する方法です。それは非表示になり、テーブルビューのテーブルビューセルが押されたときに表示したいと思います。それは可能ですか?どうやってやるの?
最善の解決策は、StoryBoard で通常のビュー コントローラー (UIViewController) を使用することです。コントローラーは 2 つのプロトコル (UITableViewDataSource と UITableViewDelegate) を実装する必要があり、ビュー コントローラーのビューに UITablewView を追加する必要があります。
この場合、インターフェイス ビルダーでは、ビュー コントローラーのビューに任意のビューを配置できます (テーブル ビューの上に配置できます)。
tableHeaderView プロパティを使用します。
テーブルの上に表示されるアクセサリ ビューを返します。
@property(nonatomic, retain) UIView *tableHeaderView
テーブル ヘッダー ビューは、セクション ヘッダーとは異なります。
正面を見ることができます。
[view bringsubviewtofront];
テーブル ビューの上に非表示/表示するビューが、グローバル変数として宣言された topView であると仮定します。.h で topView を次のように宣言します。
UIView *topView;
UITableViewController オブジェクトが tableViewController であると仮定して、tableViewController クラスの viewDidLoad で topView を初期化します。
-(void)viewDidLoad
{
topView=[[UIView alloc] initWithFrame:yourNeededFrameSize];
[self.tableView addSubview:topView];//tableView is a property for UITableViewController inherited class
topView.hidden=YES;//Hide it initially for the first time.
}
ここで UITableViewDelegate メソッドが実装されていると仮定すると、didSelectRowAtIndexPath で行うことになります。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(topView.isHidden==YES)
{
topView.hidden=NO;
}
else
{
topView.hidden=NO;
}
}
それが役に立てば幸い。
UITableViewController の上に読み込みインジケーターを追加したいという同様の問題がありました。これを解決するために、UIView をウィンドウのサブビューとして追加しました。これで問題は解決しました。これが私がやった方法です。
-(void)viewDidLoad{
[super viewDidLoad];
//get the app delegate
XYAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
//define the position of the rect based on the screen bounds
CGRect loadingViewRect = CGRectMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2, 50, 50);
//create the custom view. The custom view is a property of the VIewController
self.loadingView = [[XYLoadingView alloc] initWithFrame:loadingViewRect];
//use the delegate's window object to add the custom view on top of the view controller
[delegate.window addSubview: loadingView];
}