小编PMT*_*PMT的帖子

Flutter ListView 不会使用 setState() 刷新 UI,尽管 itemCount 和附加列表正确更新

我看到很多人有非常相似的问题,但我尝试的任何方法都不起作用。

语境

我有一个最喜欢的想法列表。每当我单击ideaItem 内的按钮时,它都应该从列表中删除。

问题

当我删除任何ideaItem时,屏幕上的最后一个总是被删除,而不是我点击的那个。My FavoriteIdeasListView 似乎正确更新了项目计数,这意味着附加的列表有效,但 UI 没有重绘ideaItems。

我的尝试

  • 一开始我直接在ideaItem上有删除功能,我读到我应该做一个VoidCallback并处理List本身的删除,所以它会注意到变化。它没有用

  • 我还尝试使用 Stream Builder,因此该流会通知 ListView 进行刷新。它也没有用

  • 我一直尝试调用 SetState 并且它不会重新加载,它只会在初始状态的开头构建列表。


    class FavoritesList extends StatefulWidget {
      FavoritesList({Key key}) : super(key: key);

      @override
      _FavoritesListState createState() => _FavoritesListState();
    }

    class _FavoritesListState extends State<FavoritesList> {

      List<Idea> _favorites = [];

      @override
      void initState() {
        super.initState();
        favoritesInitialState();
      }

      Future <void> favoritesInitialState() async {
        List<Idea> ideas = await IdeasDB.db.ideas();
        setState(() {
          _favorites = ideas;
        });
      }

      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
                title: Text('Favorites')), …
Run Code Online (Sandbox Code Playgroud)

listview reactive-programming dart flutter

9
推荐指数
1
解决办法
3289
查看次数

如何接受/拒绝EKEvent邀请?

我想允许我的用户在我的应用中接受/拒绝会议邀请.

我认为我需要的是以某种方式更新EKParticipantStatus,但看起来它无法更新.

Apple Docs:Event Kit无法将参与者添加到活动中,也无法更改参与者信息

在这个stackOverflow问题中有人建议带来本机EventKitUI,我试过这样:

  class CalendarViewController: UIViewController, EKEventViewDelegate {

        // .....

        let eventController = EKEventViewController()
        guard let eventWithIdentifier = MeetingsFetcher.eventStoreClass.event(withIdentifier: meeting.UUID) else {
            return nil
        }
        eventController.delegate = self
        eventController.event = eventWithIdentifier
        eventController.allowsEditing = true
        eventController.allowsCalendarPreview = true

        let navCon = UINavigationController(rootViewController: eventController)

        // customizing the toolbar where the accept/maybe/decline buttons appear
        navCon.toolbar.isTranslucent = false
        navCon.toolbar.tintColor = .blueGreen
        navCon.toolbar.backgroundColor = .coolWhite10

        // customizing the nav bar where the OK button appears
        navCon.navigationBar.callinAppearence()
        present(navCon, animated: true, completion: …
Run Code Online (Sandbox Code Playgroud)

ios ekevent ekeventkit ekeventstore swift

7
推荐指数
1
解决办法
378
查看次数

为什么我的iPad布局不能在旋转时重新调整?

我有一个适用于iPad的Split View控制器,它应该支持两种方向(纵向和横向).

问题是,当我更改设备的方向时,细节视图不会重新调整以使用整个空间,并且会出现灰色方块.

在此输入图像描述

我不认为这是约束的问题,因为这只有在我旋转时才会发生:

  • 当我以纵向模式启动应用程序时,布局加载良好.
  • 当我以横向模式启动应用程序时,布局加载良好.

在此输入图像描述

在SplitViewController(以及DetailsController)中我尝试了这段代码:

在viewDidLoad中:

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)

然后:

override func shouldAutorotate() -> Bool {
    print("should rotate --> true")
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    print("we support all orientations")
    return UIInterfaceOrientationMask.All
}

override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
    print("preferred orientation for presentation is landscape")
    return UIInterfaceOrientation.LandscapeLeft
}

func rotated(){
    print("rotatiooooonn ------------")
    refreshIpad()
    detailSplitViewController.refreshUI()
}

func refreshIpad (){
    dispatch_async(dispatch_get_main_queue(),{
        self.view.setNeedsLayout()
    })
}
Run Code Online (Sandbox Code Playgroud)

在日志中我得到了这个(所以每当方向发生变化时我都可以看到)

should rotate --> true
we support all …
Run Code Online (Sandbox Code Playgroud)

layout ipad ios landscape-portrait swift

6
推荐指数
1
解决办法
601
查看次数

在xib文件中在TableViewCell中显示可变数量图像的最佳方法是什么?

我正在构建一个关于会议的应用程序,我希望在每个会议单元中显示VIP参与者的预览.

这些参与者不可点击也不可滚动,唯一目的就是快速查看它们.

问题是视图非常动态:

  • VIP显示图像或缩写
  • 其余与会者只是一个数字
  • 如果超过5个VIP,则圆圈开始重叠(间距变小)
  • 如果9名贵宾,大包装圈"所有出席的贵宾"

这是它的样子: 在此输入图像描述

我该怎么办?

  • CollectionView(因为我对图像的任何交互都不感兴趣,所以看起来过度杀戮)?
  • StackView?
  • 图像(并以编程方式更改约束)?

注意:

这只是一种Table View Cell,但我们有很多变化,所以我们在xib文件中构建自定义单元格.Xcode不允许我将集合视图单元格添加到xib中的集合视图中.

在此输入图像描述

uitableview ios uicollectionviewcell swift uistackview

5
推荐指数
1
解决办法
305
查看次数

查找SPARQL查询中应用的直接属性

我有一个我想要应用于特定实体的属性列表mathematics: wd:Q395.在这种情况下:

instanceOf: 'wdt:P31'
subclassOf: 'wdt:P279'
Run Code Online (Sandbox Code Playgroud)

结果是:

数学是学科的实例,数学是精确科学和形式科学的子类

我不想做两个不同的查询,而是一次性完成它们:

SELECT ?field ?fieldLabel ?propertyApplied
WHERE {
      wd:Q395 wdt:P31 | wdt:P279  ?field. 
      SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
      BIND("" AS ?propertyApplied)
}
Run Code Online (Sandbox Code Playgroud)

如何知道应用哪个属性填充右栏?(例如,在学术学科旁边,我希望它出现的例子) 在此输入图像描述

我试过这个,但看起来很奇怪,结果重复了一遍.

SELECT ?instanceOf ?subclassOf ?instanceOfLabel ?subclassOfLabel
WHERE {
      OPTIONAL { wd:Q395 wdt:P31 ?instanceOf. }
      OPTIONAL { wd:Q395 wdt:P279 ?subclassOf. }
      SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

wikipedia sparql wikidata wikidata-api

5
推荐指数
1
解决办法
90
查看次数

如何使用 EKEventViewController 在我的应用程序中显示 EKEvent 邀请的详细信息?

简要总结

我希望我的应用程序的用户能够接受/拒绝他们日历的活动邀请。为此,我尝试使用 EventKitUI 组件启动事件,并允许用户在不离开我的应用程序的情况下更新事件。 问题是每当我将 EKEvent 分配给 EKEventViewController 时它就会崩溃

详细说明

我想要的是:

要显示类似于本机 iOS 日历中的视图,它应该如下所示:

在此处输入图片说明

我拥有的:

import UIKit
import EventKitUI

class CalendarViewController: UIViewController, EKEventViewDelegate, EKEventEditViewDelegate {

   var meetingID = "id"

   override func viewDidLoad() {
       super.viewDidLoad()
       //self.showEditEvent(meeting: meetingID)
       self.showInvite(meeting: meetingID)
   }

   func showInvite(meeting: Meeting){
        let evc = EKEventViewController()
        var event = EKEvent(eventStore: MeetingsFetcher.eventStoreClass)
        event = MeetingsFetcher.eventStoreClass.event(withIdentifier: meetingID)!
        evc.delegate = self 
        evc.event = event
        evc.allowsEditing = true
        evc.allowsCalendarPreview = true
        self.screen.present(evc, animated: true, completion: nil)
    }

    func eventViewController(_ controller: EKEventViewController, …
Run Code Online (Sandbox Code Playgroud)

calendar ios eventkit ekevent swift

4
推荐指数
1
解决办法
775
查看次数

当 ObservedObject 更改时,onReceive 不会在 SwiftUI 视图中被调用

每当 ObservedObject 中的变量发生更改时,我都无法触发 SwiftUI 视图中的 onReceive 方法。

我尝试了两种方法:使用@Publish和使用PassthroughSubject<>

这是视图模型

class MenuViewModel: ObservableObject {

@Published var selectedItems = Set<UUID>()
@Published var currentFocusItem: UUID?

// Output
let newItemOnFocus = PassthroughSubject<(UUID?), Never>()

// This function gets called good :)
func tapOnMenuItem(_ item: MenuItem) {
    if selectedItems.contains(item.id) {
        //These changes should trigger the onReceive?
        currentFocusItem = item.id  
        newItemOnFocus.send(item.id)
    } else {
        selectedItems.insert(item.id)
        currentFocusItem = nil
        newItemOnFocus.send(nil)
    }
}
}
Run Code Online (Sandbox Code Playgroud)

这是尝试捕获@Published var currentFocusItem中的更改时的视图

struct MenuView: View {

    @ObservedObject private var …
Run Code Online (Sandbox Code Playgroud)

mvvm ios swift swiftui combine

4
推荐指数
1
解决办法
7207
查看次数

如何保持d3.forceSimulation()节点均匀分布而不重叠

我试图制作一个图形,其中某些节点应位于左侧,某些节点应位于"创世节点"的右侧,该节点应位于我的svg的中心.

设置力量:

  • d3.forceManyBody()因此节点应相互排斥
  • d3.forceLink().distance(60).strength(1)所以链接将保持其长度
  • d3.forceCenter(width/2,height/2)将主节点定位在中心.我也尝试删除它,但只是使图形出现在左上角,只有一小部分节点可见

所以最后它看起来像这样:

var simulation = d3.forceSimulation()
       .force("link", d3.forceLink().id(function (d) {
              return d.id;}).distance(60).strength(1))
       .force("charge", d3.forceManyBody())
       .force("center", d3.forceCenter(width / 2, height / 2));
Run Code Online (Sandbox Code Playgroud)

设置节点: 我也尝试设置attr xy不是cxcy,但没有任何改变.xCenter并且yCenter是显示图形的svg的中心.

node = svg.selectAll(".node")
    .data(nodes)
    .enter()
    .append("g")
    .attr("class", "node");

node.append("circle")
    .attr("r", 6)
    .attr("cx", function (d) {
       return colors(d.position*20 + xCenter);})
    .attr("cy", function (d) {return colors(yCenter);})
    .style("fill", function (d) {return colors(d.group);})
Run Code Online (Sandbox Code Playgroud)

更新模拟

function ticked() {
   node
       .attr("transform", function (d) {
            return "translate(" + …
Run Code Online (Sandbox Code Playgroud)

javascript svg graph d3.js

3
推荐指数
1
解决办法
1350
查看次数