Как найти положение x, y рамки кнопки в пользовательской ячейке

Я сделал табличное представление с пользовательской ячейкой следующим образом.

![Пользовательская ячейка][1]

![Вывести табличное представление][2]

мне нужно установить рейтинги, используя средство выбора вместо ползунка в каждой ячейке

введите здесь описание изображения

Мне нужно установить позицию выбора только ниже кнопки, она будет меняться в зависимости от положения кнопки

как этого добиться.

iu пытался использовать рамки и границы, как показано ниже, но каждый раз давал одно и то же значение

   - (IBAction) buttonClicked:(UIButton *)sender
    {      
          NSLog(@"------%f  %f",sender.frame.origin.x , sender.frame.origin.y); //250, 2

         NSLog(@"------%f  %f",sender.bounds.origin.x , bounds.frame.origin.y); // 0.0 , 0.0

       picker.frame = CGRectMake(sender.bounds.origin.x , sender.bounds.origin.y, 50, 216);
}

person user1811427    schedule 28.01.2013    source источник


Ответы (3)


У вас есть опечатка в последней строке, где вы используете значение «.x» дважды, вместо того, чтобы использовать значение «.y» во второй раз.

Кроме того, вам необходимо преобразовать координаты в координаты представления, в котором отображается средство выбора. Включите код для отображения средства выбора, и я могу помочь вам с этим.

Это будет примерно так:

picker.frame = [viewThatYouAreDisplayingThePickerIn convertRect:sender.frame fromView:sender.superview];
person lnafziger    schedule 28.01.2013

Но все же, если вы хотите получить рамку кнопок относительно основного вида, используйте это:

 CustomCell *cell = (CustomCell *)[self.table cellForRowAtIndexPath:indexPath];

 CGRect buttonFrame = [cell.superview convertRect:cell.customButton.frame toView:self.view];
person Bhupendra    schedule 28.01.2013
comment
Откуда вы предлагаете нам взять indexPath? :-) - person lnafziger; 28.01.2013
comment
когда вы создали ячейки в cellforrowatindexpath в то время, вы можете указать тег для кнопок, а затем использовать этот тег для создания indexpath, например [NSIndexPath indexPathForRow:button.tag inSection:0] - person Bhupendra; 28.01.2013
comment
Что ж, это один из способов сделать это... Хотя кажется, что для того, что он пытается сделать, требуется много работы. :) (кстати, если вы хотите использовать эту технику по другим причинам, гораздо проще использовать метод indexPathsForRowsInRect табличного представления, как показано в моем предыдущем ответе здесь: stackoverflow.com/a/14352372/937822 вместо тегов). - person lnafziger; 28.01.2013
comment
да, вы правы, lnafziger, но чтобы получить viewThatYouAreDisplayingThePickerIn, он должен каким-то образом получить объект ячейки таблицы ... и ему нужен indexPath, чтобы получить объект ячейки таблицы, не так ли? - person Bhupendra; 28.01.2013
comment
О, хорошо, он может использовать метод супервизора, да;) - person Bhupendra; 28.01.2013
comment
Да, в этом случае он все равно не отображает его в ячейке (он показывает его где-то под текущей ячейкой), поэтому ссылка на него не понадобится. Вероятно, в виде таблицы, но трудно сказать наверняка, поскольку он не публиковал эту часть своего кода. - person lnafziger; 28.01.2013

кнопка имеет метод с именем locationInView, унаследованный от UITouch

Returns the current location of the receiver in the coordinate system of the given view.
- (CGPoint)locationInView:(UIView *)view

Справочник разработчика Apple

person fengd    schedule 28.01.2013