KUROKI Masayuki
m_kurok****@mac*****
2003年 8月 7日 (木) 19:52:32 JST
黒木です。 最近、スレで要望が何度が出ている、掲示板リストの編集で上下ボタンに反応 しない問題 に取り組んでいます。これバグではなくって単なる実装もれですね。 ざっと、実装したところ大体はうまくいくようになったのですが、うまく動か ない部分も あり、ちょっと仕様のアドバイスをお願いします。 現在の仕様は以下の通り ・単数行選択以外では上下ボタンは無反応。 ・お気に入りは対象外 ・先頭行で上、最下行で下を押しても無反応。 ・カテゴリーをまたいでの移動はしない。つまり、カテゴリー内で最上位から上 を押しても無反応。 ここで問題点は 1)別カテゴリーへの移動や、左へ右へという移動はできない。 上下ボタンの仕様を変更して対応するか?その場合にはどのような動作がよいか? あるいは、D&Dでの移動をできるようにして、そちらを利用してもらえばよいか? 2)複数行選択には現在未対応ですが、どのように対応すればよいでちょうか? 問題は、一番上の行が含まれている場合にどのようにするかです。 つまり、2行目、3行目を選択して上としたときの期待する動作は (1,2,3,...)->(2,3,1,...) ですが、1行目、2行目を選択した場合、(1,2,3,...)->(1,2,3,...)となりそうです。 でも1行目、3行目の時は(1,2,3,...)->(1,3,2,...)なのか(1,2,3,...)->(1,2,3,...) のどちらが上記二つの動作と整合しているのかがわかりません。 あと、takanori_isさんは帰省中はパッチの反映などはできないのでしたっけ? --以下、現在の対応ソース。 <BoardListEditor.m> - (IBAction) moveItem : (id) sender { int usr_rowIndex_; NSDictionary *usr_selItem_; int direction_; // 複数行選択は未対応 if ( 1 != [[self userListTable] numberOfSelectedRows] ) { return; } usr_rowIndex_ = [[self userListTable] selectedRow]; usr_selItem_ = [[self userListTable] itemAtRow : usr_rowIndex_]; if ( NULL == usr_selItem_ ) return; direction_ = [(NSControl*)sender tag]; [[self userList] moveItem:usr_selItem_ direction:direction_]; } <BoardList.h>(下記行をインスタンスメソッドの最後に追加) - (void) moveItem:(NSDictionary *)item direction:(int)direction; <BoardList.m> /** * 項目のリスト内での順序を変更する。 * 階層をまたいでの順序変更や、別のグループへの移動は行わない。 * * @param item 移動対象のitem * @param direction 移動方向。 0 ... 上、1 ... 下 */ - (void) moveItem:(NSDictionary *)item direction:(int)direction { NSString *url_; NSString *name_; NSDictionary *item_; NSMutableArray *container_; unsigned int index_; unsigned int insert_index_; url_ = [item objectForKey : BoardPlistURLKey]; name_ = [item objectForKey : BoardPlistNameKey]; if( NULL != url_) { item_ = [self itemForAttribute : url_ attributeKey : BoardPlistURLKey seachMask : BoardListBoardItem containsArray : &container_ atIndex : &index_]; } else if ( NULL != name_ ) { item_ = [self itemForAttribute : name_ attributeKey : BoardPlistNameKey seachMask : (BoardListBoardItem | BoardListCategoryItem) containsArray : &container_ atIndex : &index_]; } else { return; } switch ( direction ) { case 0:// 上へ if ( index_ == 0 ) { return; } insert_index_ = index_ - 1; break; case 1:// 下へ if ( index_ == [container_ count] - 1 ) { return; } insert_index_ = index_ + 1; break; } [item retain]; [container_ removeObjectAtIndex:index_]; [container_ insertObject:item atIndex:insert_index_]; [item release]; [self postBoardListDidChangeNotification]; } -- 黒木 政幸 Masayuki KUROKI mailto:m_kurok****@mac***** http://homepage3.nifty.com/eien-factory/