Перейти к содержанию
Fire Monkey от А до Я
  • 0

Кнопка не обновляет Text без плясок под iOS


golomeen

Вопрос

Сделал компонент типа тулбарчика

Суть в двух словах - на listItem/TreeItem в рантайме налепляет TPanel с TButton'ами внутри, до нажатия на любой из Button. Функционал под Button к примеру Show/Hide

1. После нажатия кнопка делается как будто прозрачной

2. Т.к. нажатие кнопки меняет состояние Item то при следующем показе кнопка должна показывать другой текст, тем не менее но отображается старый

3. Эффекты 1 и 2 сохраняются даже при смене Item и пропадают только если Item находится в другом родителе (из ListBox в TreeView)

4. Нужный текст меняется непосредственно при нажатии

 

Далее код метода. Вызывается например так SetOptions(lbWorks.ListItems[0],['Delete','Hide']);

Например нажимаю Hide, при следующем показе это будет

SetOptions(lbWorks.ListItems[0],['Delete','Show']) - вот здесь фиг! Пока я не поменяю lbWorks на какой-нить tvSomeTree здесь вечно будет показывать Hide (и наоборот)

Во всех режимах iOS такая ерунда, под win32 ок.

procedure TSwiperOptions.SetOptions(AObject: TObject; options: array of string);
var
  i: integer;
  oldW : Single;
  btn : TActionBtn;
  par : TfmxObject;
begin
  if not Assigned(Parent) then
    exit;

  {workaround for button repaint}
  Par := Parent;
  Parent := nil;
  Parent := Par;


  //FButtons.Clear;
{  for i := ControlsCount-1 downto 0 do
  begin
    comp := Controls[i];
    Self.Controls.Remove(comp);
    comp.Free;
  end; }

  FContextObject := AObject;
  for i := FButtons.Count to Length(options)-1 do
  begin
    btn := TActionBtn.Create(Self);
    FButtons.Add(btn);
    btn.Parent := self;
    btn.HitTest := True;
    btn.Align := TAlignLayout.Right;
    btn.VertTextAlign := TTextAlign.Center;
    btn.OnClick := OnButtonClick;
    btn.ControlType := TControlType.Platform;
    btn.CanFocus := False;
    btn.StyledSettings := [];
  end;

  for i := Length(options) to FButtons.Count-1  do
    FButtons[i].Visible := false;

  for i := 0 to Length(options)-1 do
  begin
    btn := FButtons[i];
    btn.Visible := True;
    btn.StaysPressed := false;
    btn.Text := options[i];
    btn.Width := Self.Width / Length(options);
  end;
  oldW := Width;
  Width := 0;
  CanFocus := True;
  SetFocus;
  Visible := True;
  FMX.Ani.TAnimator.AnimateFloat(Self,'Width',oldW,0.5);
end;

Если бы я знал какие-то программные пляски, то наверно я бы забил, но я даже их пока не нашел чтобы избавиться от эффекта

Изменено пользователем golomeen
Ссылка на комментарий

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...